在 python 中,使用 twisted loopingcall、multiprocessing.Process 和 multiprocessing.Queue;是否有可能创建一个僵尸进程。如果是这样,那又如何呢?
最佳答案
A zombie是一个已经完成但启动它的进程尚未注意到其完成的进程。收获它的 child 是 Twisted 进程的责任。
如果您使用 spawnProcess
开始该过程,一切都应始终按预期工作。但是,如 bug #733 in Twisted 中所述(早已修复),当您想将 Twisted 与其他生成进程的函数一起使用时,会出现大量令人讨厌的边缘情况,因为 Python 的 API 在历史上使得信号处理程序之间的协作变得困难。
这在最近版本的代码中都已修复,但我相信您在以下情况下仍可能会遇到此错误:
- 您使用的是早于 10.1 的 Twisted 版本。
- 您使用的是 2.6 之前的 Python 版本。
- 您没有构建 Twisted 的 native 扩展模块(如果您使用的是开发结帐或解压的 tarball 而不是已安装的版本,则可以使用
python setup.py build_ext -i
修复此问题) . - 您正在使用类似
popen
或subprocess
的模块。
希望升级 Twisted 或运行适当的命令将解决您的直接问题,但您仍应考虑使用 spawnProcess
,因为它可以让您将进程输出视为 react 器事件循环中的正常事件。
关于python - twisted 和 multiprocessing.Process 如何创建僵尸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589225/