diff --git a/nipype/pipeline/plugins/legacymultiproc.py b/nipype/pipeline/plugins/legacymultiproc.py index d93e6e77d1..dd88a55055 100644 --- a/nipype/pipeline/plugins/legacymultiproc.py +++ b/nipype/pipeline/plugins/legacymultiproc.py @@ -11,7 +11,7 @@ # Import packages import os -from multiprocessing import Process, Pool, cpu_count, pool +from multiprocessing import Pool, cpu_count, pool from traceback import format_exception import sys from logging import INFO @@ -74,23 +74,23 @@ def run_node(node, updatehash, taskid): return result -class NonDaemonProcess(Process): - """A non-daemon process to support internal multiprocessing. - """ - - def _get_daemon(self): - return False - - def _set_daemon(self, value): - pass - - daemon = property(_get_daemon, _set_daemon) - - class NonDaemonPool(pool.Pool): """A process pool with non-daemon processes. """ - Process = NonDaemonProcess + def Process(self, *args, **kwds): + proc = super(NonDaemonPool, self).Process(*args, **kwds) + + class NonDaemonProcess(proc.__class__): + """Monkey-patch process to ensure it is never daemonized""" + @property + def daemon(self): + return False + + @daemon.setter + def daemon(self, val): + pass + proc.__class__ = NonDaemonProcess + return proc class LegacyMultiProcPlugin(DistributedPluginBase):