python多处理:在杀死子进程时通知父进程
我试图模拟一个场景,在这个场景中,python多处理池生成的子进程被杀死。子进程永远不会返回,但我希望在这种情况下通知父进程。我使用的测试代码是:python多处理:在杀死子进程时通知父进程,python,multiprocessing,parent-child,python-multiprocessing,Python,Multiprocessing,Parent Child,Python Multiprocessing,我试图模拟一个场景,在这个场景中,python多处理池生成的子进程被杀死。子进程永远不会返回,但我希望在这种情况下通知父进程。我使用的测试代码是: import multiprocessing as mp import time import os result_map = {} def foo_pool(x): print x,' : ',os.getpid() pid = os.getpid() if x == 1: os.kill(pid,9)
import multiprocessing as mp
import time
import os
result_map = {}
def foo_pool(x):
print x,' : ',os.getpid()
pid = os.getpid()
if x == 1:
os.kill(pid,9)
return x
result_list = []
def log_result(result):
print 'callback',result
def apply_async_with_callback():
print os.getpid()
pool = mp.Pool()
for i in range(2):
result_map[i] = pool.apply_async(foo_pool, args = (i, ), callback = log_result)
pool.close()
pool.join()
for k,v in result_map.iteritems():
print k,' : ',v.successful()
print(result_list)
if __name__ == '__main__':
apply_async_with_callback()
进程池不公开任何机制来通知父进程子进程终止 项目喜欢或可能做你正在寻找的事情
请记住,没有办法截获SIGKILL信号,因此使用信号处理程序是毫无意义的。我不确定您的方法是否正确。如果您有一个事件并希望发布它,请使用
多进程.event
。如果子级由于某种原因被终止-请尝试安装相关的信号处理程序,将终止它的信号通知父级。在子级中使用信号处理程序是没有意义的,但在父级中没有意义,可以使用SIGCHLD
来确定子级是否因任何原因终止。并非所有操作系统都支持SIGCHLD。此外,许多SIGCHLD的Unix实现倾向于聚合多个信号,从而更难检测哪个进程何时死亡。@noxdafox wait()告诉您哪个子进程死亡。wait()不可移植,因为Windows不支持它。此外,Python没有为进程公开这样的API。