【问题标题】:Pylons and zombie processesPylons 和僵尸进程
【发布时间】:2011-09-21 18:03:10
【问题描述】:

我正在尝试编写一个允许用户启动长时间运行的计算过程(例如几个小时)的应用程序。为此,我使用 Python Popen() 函数。只要主 Pylons 进程正常工作,一切都很好,但是当我重新启动 Pylons 进程时,如果上次启动粘贴程序留下任何僵尸进程,它不会响应任何请求。

此问题的根源或解决方法是什么?

提前致谢,伊万。

【问题讨论】:

    标签: python pylons multiprocessing zombie-process


    【解决方案1】:

    为了避免僵尸进程,子进程必须执行双叉以将自己从控制进程中分离出来。见http://en.wikipedia.org/wiki/Zombie_process

    因此,您需要做的就是让您的子进程再次分叉 - 同时小心保持相关文件句柄处于打开状态,以便您仍然可以进行通信。

    【讨论】:

    • 是否有其他方法可以同时在 Linux 和 Windows 上运行?
    【解决方案2】:

    您需要某种消息传递。这可以通过安装信号处理程序来完成。 Python 对此有 signal 模块,Popen 有一个 send_signal 方法。

    也许http://www.doughellmann.com/PyMOTW/subprocess/#signaling-between-processes 也能帮到你。

    【讨论】:

    • 我猜你没有理解我的问题。我使用 0mq 在进程之间传递数据,但是如果还有僵尸进程,web-server 进程就会冻结。目标是了解问题的根源并了解如何使 Pylons 流程正常工作。
    • 最好的选择是接他们并继续与他们沟通。避免僵尸进程的主要问题是Web服务器进程可以在没有任何警告的情况下终止,因此没有简单的方法可以知道它是否仍在运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2011-11-09
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多