取消加入多sys.exit后(cancel join after sys.exit in multi

2019-10-20 04:38发布

在OSX创建与multiprocessing.Process进程树。 当我将信号发送到父进程,进程进入一个连接状态:

[INFO/MainProcess] process shutting down
[INFO/MainProcess] calling join() for process Process-1

我已经赶上了信号处理的信号然后调用sys.exit(1)。 有什么我可以sys.exit(1)之前调用,将阻止等待其子这个过程?

Answer 1:

您可以通过设置避免这个daemon属性为True在你的子进程。 从multiprocessing.Process文档(重点煤矿):

守护进程

该进程的守护进程的标志,一个布尔值。 这必须开始之前进行设置()被调用。

的初始值是从创建进程继承。

当一个进程退出时,它会试图终止其所有恶魔的子进程。

请注意,恶魔的过程中是不允许创建子进程。 否则,一个恶魔的过程中会留下,如果当它的父进程退出被终止孤立的孩子。 此外,这些都不是Unix的守护进程或服务,它们是将被终止(并且没有加入),如果非恶魔的进程已经退出的正常进程。

所以,如果p.daemon == True ,你的父进程会杀了你的孩子的过程,而不是join它。 但是请注意,你的恶魔的过程不能创建自己的孩子(如文档规定)。



Answer 2:

我通过使用解决了这个os._exit(1)而不是sys.exit(1)



文章来源: cancel join after sys.exit in multiprocessing