summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Pollard <tom.pollard@codethink.co.uk>2019-11-12 16:55:12 +0000
committerTom Pollard <tom.pollard@codethink.co.uk>2019-12-11 10:01:01 +0000
commitac2433491154c458e8d0c7cc68ccd6cded508153 (patch)
tree22623b8808f84b82bca193cfd63c100bba9d261d
parent5c8a716a04fcb0c36ec5b6ac0669e2a1b2c7ac6d (diff)
downloadbuildstream-tpollard/buildsubprocess.tar.gz
Apply AsyncioSafeProcess to Stream's multiprocesstpollard/buildsubprocess
Note this stops explictly using the get_context object from multiprocessing which allows for fork to be used in a process where spawn is the default. This obviously breaks the linux CI targets for FORCE SPAWN.
-rw-r--r--src/buildstream/_multiprocessing.py (renamed from src/buildstream/_scheduler/_multiprocessing.py)0
-rw-r--r--src/buildstream/_scheduler/jobs/job.py3
-rw-r--r--src/buildstream/_stream.py6
3 files changed, 4 insertions, 5 deletions
diff --git a/src/buildstream/_scheduler/_multiprocessing.py b/src/buildstream/_multiprocessing.py
index 4864e140c..4864e140c 100644
--- a/src/buildstream/_scheduler/_multiprocessing.py
+++ b/src/buildstream/_multiprocessing.py
diff --git a/src/buildstream/_scheduler/jobs/job.py b/src/buildstream/_scheduler/jobs/job.py
index 460f63dbf..9d135c61b 100644
--- a/src/buildstream/_scheduler/jobs/job.py
+++ b/src/buildstream/_scheduler/jobs/job.py
@@ -33,8 +33,7 @@ import traceback
from ..._exceptions import ImplError, BstError, SkipJob
from ..._message import Message, MessageType, unconditional_messages
from ...types import FastEnum
-from ... import _signals, utils
-from .. import _multiprocessing
+from ... import _signals, utils, _multiprocessing
from .jobpickler import pickle_child_job, do_pickled_child_job
diff --git a/src/buildstream/_stream.py b/src/buildstream/_stream.py
index ebabcac5e..86eea4905 100644
--- a/src/buildstream/_stream.py
+++ b/src/buildstream/_stream.py
@@ -65,7 +65,7 @@ from ._profile import Topics, PROFILER
from ._state import State
from .types import _KeyStrength, _SchedulerErrorAction
from .plugin import Plugin
-from . import utils, _yaml, _site, _signals
+from . import utils, _yaml, _site, _signals, _multiprocessing
from . import Scope
@@ -152,7 +152,7 @@ class Stream:
def run_in_subprocess(self, func, *args, **kwargs):
assert not self._subprocess
- mp_context = mp.get_context(method="fork")
+ # mp_context = _multiprocessing.get_context(method='fork')
process_name = "stream-{}".format(func.__name__)
self._notify_front_queue = mp.Queue()
@@ -165,7 +165,7 @@ class Stream:
args.insert(0, self._notify_front_queue)
args.insert(0, func)
- self._subprocess = mp_context.Process(
+ self._subprocess = _multiprocessing.AsyncioSafeProcess(
target=Stream._subprocess_main, args=args, kwargs=kwargs, name=process_name
)