在进程上禁用守护进程属性的缺点?

时间:2018-03-05 01:05:49

标签: python multiprocessing

an answer问题" Python Process Pool non-daemonic?"它显示了如何禁用进程的守护进程属性:

class NoDaemonProcess(multiprocessing.Process):
    # make 'daemon' attribute always return False
    def _get_daemon(self):
        return False
    def _set_daemon(self, value):
        pass
    daemon = property(_get_daemon, _set_daemon)

# We sub-class multiprocessing.pool.Pool instead of multiprocessing.Pool
# because the latter is only a wrapper function, not a proper class.
class MyPool(multiprocessing.pool.Pool):
    Process = NoDaemonProcess

这允许池中的进程启动它自己的子进程,如原始问题中所述。

为了换取启动子流程的灵活性,需要支付哪些费用?如果没有成本,可能标准池将使用非守护进程。

注意:这个问题是基于一条未得到充分反映的高度评价的评论,因此我决定将其转换为一个问题。

1 个答案:

答案 0 :(得分:1)

如果其父进程终止,将终止守护进程。非守护进程将阻止其父进程终止,直到它终止。

因此,如果您不介意阻止其父流程的子流程,您可以随意使用非守护进程。