diff --git a/minerl/env/core.py b/minerl/env/core.py index f0a77b3e4..36103e9d3 100644 --- a/minerl/env/core.py +++ b/minerl/env/core.py @@ -35,6 +35,7 @@ import gym.envs.registration import gym.spaces import numpy as np +from filelock import FileLock from lxml import etree from minerl.env import comms from minerl.env.comms import retry @@ -47,6 +48,8 @@ missions_dir = os.path.join(os.path.dirname(__file__), 'missions') +launch_instance_lock = FileLock(os.path.join(os.path.dirname(__file__), 'env.lock')) + class EnvException(Exception): """A special exception thrown in the creation of an environment's Malmo mission XML. @@ -156,7 +159,8 @@ def _get_new_instance(self, port=None, instance_id=None): if InstanceManager.is_remote(): launch_queue_logger_thread(instance, self.is_closed) - instance.launch() + with launch_instance_lock: + instance.launch() return instance def init(self): diff --git a/requirements.txt b/requirements.txt index 5d164d18e..9af9e11fc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,3 +13,4 @@ getch>=1.0; sys_platform != 'win32' and sys_platform != 'cygwin' coloredlogs>=10.0 matplotlib==3.0.3 dill>=0.3.1.1 +filelock