【问题标题】:Parallel programming using python's multiprocessing and process defunc使用python的多处理和进程defunc进行并行编程
【发布时间】:2011-03-18 21:35:06
【问题描述】:

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

问题是,如果我不这样做,我会让子进程变成僵尸(并且将在顶部列表中列为“python ”之类的东西)。

有什么方法可以避免等待子进程结束并避免创建僵尸进程和\或不过多打扰主进程的子进程?

【问题讨论】:

    标签: python join parallel-processing multiprocessing wait


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可能需要提供更多信息或实际代码才能解决此问题。您是否通过documentation,特别是标有“警告”的部分?例如,您可能会遇到这样的情况:

      警告:如上所述,如果子进程已将项目放入队列(并且它没有使用 JoinableQueue.cancel_join_thread()),那么该进程将不会终止,直到所有缓冲的项目都已已冲入管道。

      这意味着如果您尝试加入该进程,您可能会遇到死锁,除非您确定已放入队列的所有项目都已被消耗。同样,如果子进程是非守护进程,则父进程在尝试加入其所有非守护子进程时可能会在退出时挂起。

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

      【讨论】: