使用python的多处理和进程defunc进行并行编程

时间:2010-07-21 09:45:14

标签: python join parallel-processing multiprocessing wait

我在使用多处理创建并行程序时遇到问题。 AFAIK当我使用这个模块启动一个新进程(多处理)我应该“os.wait()”或“childProcess.join()”来获得它的'退出状态。但是,如果子进程发生某些事情(并且子进程将挂起),则可以在停止主进程时将上面的函数放在我的程序中。

问题在于,如果我不这样做,我会让子进程变成僵尸(在顶部列表中会被列为“python< defunct>”)。

有没有办法避免等待子进程结束并避免创建僵尸进程和\或者不打扰主要进程如此多地关注它的子进程?

2 个答案:

答案 0 :(得分:2)

虽然ars'的回答可以解决您的直接问题,但您可以考虑查看芹菜:http://ask.github.com/celery/index.html。这是一种相对开发人员友好的方法来实现这些目标等等。

答案 1 :(得分:0)

您可能需要提供更多信息或实际代码才能解决这个问题。您是否浏览过documentation,特别是标有“警告”的部分?例如,您可能面临这样的事情:

  

警告:如上所述,如果子进程已将项目放入队列(并且它未使用JoinableQueue.cancel_join_thread()),则该进程将不会终止,直到所有缓冲的项目都有被冲到了烟斗里。

     

这意味着如果您尝试加入该进程,则可能会遇到死锁,除非您确定已经使用了已放入队列的所有项目。类似地,如果子进程是非守护进程,则父进程在尝试加入其所有非守护进程子进程时可能会在退出时挂起。

     

请注意,使用管理器创建的队列没有此问题。请参阅编程指南。