【问题标题】:Python Kill all child processes when main process is killedPython在主进程被杀死时杀死所有子进程
【发布时间】:2018-04-10 17:36:10
【问题描述】:

主进程使用 multiprocessing.Process() 创建几个子进程。子进程还创建自己的子进程。下面是示例代码:

import multiprocessing

class MyClass(object):

    def __init__(self, name):
        self.name = name

    def print_info(self):
        proc_name = multiprocessing.current_process().name
        print 'Consumer %s has producer %s' % (proc_name, self.name)

def consumer(q):
    task = q.get()
    task.print_info()

def producer():

    queue = multiprocessing.Queue()
    proc_name = multiprocessing.current_process().name

    p = multiprocessing.Process(target=consumer, args=(queue,))
    child_proc_name = p.name

    print 'Producer %s has consumer %s' % (proc_name, child_proc_name)

    p.start()

    queue.put(MyClass(name=proc_name))

    queue.close()
    queue.join_thread()
    p.join()

if __name__ == '__main__':

    procs = []

    for _ in range(5):
        p = multiprocessing.Process(target=producer, args=())
        p.start()
        procs.append(p)

    for p in procs:
        p.join()

我的问题主要是关于当程序出现问题时如何清理所有进程。问题可能是进程被信号杀死或某些子进程出现异常。如果任何进程因问题而被杀死,我基本上想清理所有进程。我正在使用python2.7。

【问题讨论】:

    标签: python multiprocessing


    【解决方案1】:

    daemon 标志是您所需要的。如果主进程退出,守护子进程将被杀死。

    反之,唯一可移植的方法是让父级通过is_alive 方法定期检查子级是否仍在运行。

    【讨论】: