3

在python中,使用twisted loopingcall、multiprocessing.Process和multiprocessing.Queue;是否有可能创建一个僵尸进程。而且,如果是这样,那怎么办?

4

1 回答 1

6

僵尸是一个已经完成但尚未被启动它的进程注意到的进程。收割子进程是 Twisted 进程的责任。

如果您使用 开始该过程spawnProcess,则一切都应始终按预期工作。然而,正如Twisted 中的错误 #733 中所述(早已修复),当您想将 Twisted 与产生进程的其他函数一起使用时,会出现大量令人讨厌的边缘情况,因为 Python 的 API 历来使两者之间的合作变得困难信号处理程序。

这在最近的代码版本中都已修复,但我相信您在以下情况下仍然可能会遇到此错误:

  1. 您正在使用早于 10.1 的 Twisted 版本。
  2. 您使用的 Python 版本早于 2.6。
  3. 您不是在构建 Twisted 的本机扩展模块(如果您使用的是开发签出或解压缩的 tarball 而不是已安装的版本,您可以使用 修复此问题python setup.py build_ext -i)。
  4. 您正在使用类似popenor的模块subprocess

希望升级 Twisted 或运行适当的命令将解决您的直接问题,但您仍然应该考虑使用spawnProcess,因为这可以让您将进程输出视为反应器事件循环中的正常事件。

于 2011-07-05T22:08:36.493 回答