Skip to content

Commit 1dfc30d

Browse files
authored
Merge pull request #2754 from effigies/fix/multiproc37
FIX: Python 2.7-3.7.1 compatible NonDaemonPool
2 parents 0c009ff + c9a787e commit 1dfc30d

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

nipype/pipeline/plugins/legacymultiproc.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
# Import packages
1313
import os
14-
from multiprocessing import Process, Pool, cpu_count, pool
14+
from multiprocessing import Pool, cpu_count, pool
1515
from traceback import format_exception
1616
import sys
1717
from logging import INFO
@@ -74,23 +74,23 @@ def run_node(node, updatehash, taskid):
7474
return result
7575

7676

77-
class NonDaemonProcess(Process):
78-
"""A non-daemon process to support internal multiprocessing.
79-
"""
80-
81-
def _get_daemon(self):
82-
return False
83-
84-
def _set_daemon(self, value):
85-
pass
86-
87-
daemon = property(_get_daemon, _set_daemon)
88-
89-
9077
class NonDaemonPool(pool.Pool):
9178
"""A process pool with non-daemon processes.
9279
"""
93-
Process = NonDaemonProcess
80+
def Process(self, *args, **kwds):
81+
proc = super(NonDaemonPool, self).Process(*args, **kwds)
82+
83+
class NonDaemonProcess(proc.__class__):
84+
"""Monkey-patch process to ensure it is never daemonized"""
85+
@property
86+
def daemon(self):
87+
return False
88+
89+
@daemon.setter
90+
def daemon(self, val):
91+
pass
92+
proc.__class__ = NonDaemonProcess
93+
return proc
9494

9595

9696
class LegacyMultiProcPlugin(DistributedPluginBase):

0 commit comments

Comments
 (0)