【发布时间】: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。
【问题讨论】: