python多处理:当孩子被杀时通知父母

时间:2015-01-25 11:08:33

标签: 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)
    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()

1 个答案:

答案 0 :(得分:0)

进程池不公开任何机制来通知父进程有关子进程终止的信息。

billiardpebble等项目可能会为您寻找所需的内容。

请记住,无法拦截SIGKILL信号,因此使用信号处理程序毫无意义。