2010-07-21 67 views
3

我使用多处理创建并行程序时出现问题。 AFAIK当我开始一个新的进程使用这个模块(多处理)我应该做“os.wait()”或“childProcess.join()”以获得其'退出状态。但是,如果在子进程中发生了什么(并且子进程将挂起),那么将上面的函数放在我的程序中可能会停止主进程。使用python的多处理和进程并行编程defunc

的问题是,如果我不这样做,我会得到子进程去僵尸(和将被列为像在顶级上市“蟒蛇<解散>”)。

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

回答

0

您可能需要提供更多信息或实际代码才能确定。你是否通过了documentation,特别是标有“警告”的部分?例如,你可能会面临这样的事:

警告:正如上面提到的,如果一个子进程已经把项目一个队列(它没有使用JoinableQueue.cancel_join_thread()),那么进程不会终止,直到所有缓冲项目已被刷新到管道。

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

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