在python中,使用twisted loopingcall、multiprocessing.Process和multiprocessing.Queue;是否有可能创建一个僵尸进程。而且,如果是这样,那怎么办?
问问题
787 次
1 回答
6
僵尸是一个已经完成但尚未被启动它的进程注意到的进程。收割子进程是 Twisted 进程的责任。
如果您使用 开始该过程spawnProcess
,则一切都应始终按预期工作。然而,正如Twisted 中的错误 #733 中所述(早已修复),当您想将 Twisted 与产生进程的其他函数一起使用时,会出现大量令人讨厌的边缘情况,因为 Python 的 API 历来使两者之间的合作变得困难信号处理程序。
这在最近的代码版本中都已修复,但我相信您在以下情况下仍然可能会遇到此错误:
- 您正在使用早于 10.1 的 Twisted 版本。
- 您使用的 Python 版本早于 2.6。
- 您不是在构建 Twisted 的本机扩展模块(如果您使用的是开发签出或解压缩的 tarball 而不是已安装的版本,您可以使用 修复此问题
python setup.py build_ext -i
)。 - 您正在使用类似
popen
or的模块subprocess
。
希望升级 Twisted 或运行适当的命令将解决您的直接问题,但您仍然应该考虑使用spawnProcess
,因为这可以让您将进程输出视为反应器事件循环中的正常事件。
于 2011-07-05T22:08:36.493 回答