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)

我试图模拟一个场景,在这个场景中,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)
    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。