3

我一直在使用以下方法在 python 中实现并行子进程:

pool = multiprocessing.Pool(processes=4)
pool.map_async(my_parallel_func ....)
pool.close()
pool.join()

这些任务将运行几分钟。而且我注意到在此pool.join()阻塞等待期间,我无法按Ctrl+c取消主脚本。如果我点击Ctrl+ c,我会得到一个堆栈打印,程序不会停止,但它会变成一个僵尸进程。我必须手动杀死每个子进程。

如何使程序通过Ctrl+退出c,并同时终止所有子进程?

4

1 回答 1

-1

问题是Ctrl+c只从执行异步映射的池中杀死一个进程;一旦它被杀死,管理器就会使用新进程重新生成任务。您需要以某种方式做的是except KeyboardInterrupt:在 的顶层有一个my_parallel_func,然后这可以通过对主进程的一些特殊值告诉整个进程树应该死掉。

于 2013-08-19T15:52:37.357 回答