Fix avoid using Process object for forking

Fix lost semaphores
This commit is contained in:
allegroai 2022-04-13 14:17:45 +03:00
parent 2cc4eff004
commit 7b5c676ab2

View File

@ -515,7 +515,9 @@ class BackgroundMonitor(object):
def _daemon(self):
self._start_ev.set()
try:
self.daemon()
finally:
self.post_execution()
self._thread = False
@ -553,11 +555,13 @@ class BackgroundMonitor(object):
for d in BackgroundMonitor._instances.get(id(task.id), []):
d.set_subprocess_mode()
# todo: solve for standalone spawn subprocess
if ForkContext is not None and isinstance(get_context(), ForkContext):
cls.__start_subprocess_forkprocess(task_obj_id=id(task.id))
else:
# ToDo: solve for standalone spawn subprocess
# prefer os.fork, because multipprocessing.Process add atexit callback, which might later be invalid.
cls.__start_subprocess_os_fork(task_obj_id=id(task.id))
# if ForkContext is not None and isinstance(get_context(), ForkContext):
# cls.__start_subprocess_forkprocess(task_obj_id=id(task.id))
# else:
# cls.__start_subprocess_os_fork(task_obj_id=id(task.id))
# wait until subprocess is up
if wait_for_subprocess: