使用Python的多进程和进程终止进行并行编程
我在用多进程编程的时候遇到了一个问题。根据我所知道的,当我用这个模块(multiprocessing)启动一个新进程时,我应该使用“os.wait()”或者“childProcess.join()”来获取它的退出状态。但是,如果我把这些函数放在我的程序里,可能会导致主进程停止运行,特别是当子进程出现问题(比如卡住)的时候。
问题是,如果我不这样做,子进程就会变成僵尸进程(在系统监控工具中会显示为“python < defunct>”)。
有没有办法可以避免等待子进程结束,同时又不让它们变成僵尸进程,并且不让主进程太过于担心子进程的状态呢?
2 个回答
0
你可能需要提供更多的信息或者实际的代码才能弄清楚这个问题。你有没有查看过文档,特别是里面标记为“警告”的部分?比如,你可能会遇到这样的情况:
警告:如上所述,如果一个子进程在队列中放了东西(并且它没有使用JoinableQueue.cancel_join_thread()),那么这个进程不会结束,直到所有缓冲的项目都被处理完。
这意味着如果你尝试结束这个进程,可能会出现死锁,除非你确定所有放入队列的项目都已经被消费掉。同样,如果子进程不是守护进程,那么当父进程尝试结束时,可能会因为等待所有非守护子进程而卡住。
需要注意的是,使用管理器创建的队列没有这个问题。请参阅编程指南。
2
虽然ars的回答可以解决你眼前的问题,但你可以考虑看看celery:http://ask.github.com/celery/index.html。这个工具对开发者来说比较友好,可以帮助你实现这些目标以及更多功能。