python - twisted 和 multiprocessing.Process 如何创建僵尸?

标签 python process twisted multiprocessing zombie-process

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

最佳答案

A zombie是一个已经完成但启动它的进程尚未注意到其完成的进程。收获它的 child 是 Twisted 进程的责任。

如果您使用 spawnProcess 开始该过程,一切都应始终按预期工作。但是,如 bug #733 in Twisted 中所述(早已修复),当您想将 Twisted 与其他生成进程的函数一起使用时,会出现大量令人讨厌的边缘情况,因为 Python 的 API 在历史上使得信号处理程序之间的协作变得困难。

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

  1. 您使用的是早于 10.1 的 Twisted 版本。
  2. 您使用的是 2.6 之前的 Python 版本。
  3. 您没有构建 Twisted 的 native 扩展模块(如果您使用的是开发结帐或解压的 tarball 而不是已安装的版本,则可以使用 python setup.py build_ext -i 修复此问题) .
  4. 您正在使用类似 popensubprocess 的模块。

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

关于python - twisted 和 multiprocessing.Process 如何创建僵尸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589225/

相关文章:

c# - 如何将同一个应用程序部署到多个服务器

android - 停止远程进程中的服务

python - Django 休息框架 : using ModelViewSet to get a list of instances by their PKs

python - 填充 seaborn/matplotlib 中两个正态分布之间的重叠区域

c++ - 在 winapi 中以尽可能低的权限运行进程

python - Raven Twisted 集成的 SSL 选项

twisted - 以扭曲的方式在服务器和客户端之间发送数据

python - 使用 post_save 而不是 pre_save 信号检测字段变化

python - 部署在 Apache 上时,使用带有相对路径的 webpy 的 web.template.render()

python - 扭曲的非关系数据库