繁体   English   中英

如何使用python多处理模块重新启动进程

[英]How to restart a process using python multiprocessing module

我正在尝试使用多处理模块重新启动 python 进程,但出现“断言错误:无法启动进程两次”。

我的问题

  • 我怎样才能重新启动这个过程
  • 一旦它终止为什么它会变成僵尸模式
  • 如何删除僵尸进程
import time
from multiprocessing import Process

def worker ():
    while True:
        print "Inside the worker"
        time.sleep(10)


p1 = Process(target=worker,name="worker")
p1.start()
#p1.join()

time.sleep(3)

p1.terminate()
print "after Termination "
time.sleep(3)


p1.start()


实际上,我正在尝试创建一个进程监视器功能来监视所有进程的内存和 CPU 使用情况。 如果达到一定水平,我想实时重新启动

我希望它会帮助你

import time
from multiprocessing import Process

def worker ():
    while True:
        print "Inside the worker"
        time.sleep(10)

def proc_start():
    p_to_start = Process(target=worker,name="worker")
    p_to_start.start()
    return p_to_start


def proc_stop(p_to_stop):
    p_to_stop.terminate()
    print "after Termination "


p = proc_start()
time.sleep(3)
proc_stop(p)
time.sleep(3)

p = proc_start()
print "start gain"
time.sleep(3)
proc_stop(p)

我怎样才能重新开始这个过程?

您无法重新启动已终止的进程。 您需要实例化一个新进程。

一旦它终止为什么它会变成僵尸模式?

因为在 Unix-y 系统上,父进程需要在内核清除进程表中的相应条目之前读取退出代码。

如何删除僵尸进程?

您有多种选择。 我在这里引用文档

加入僵尸进程

在 Unix 上,当一个进程完成但尚未加入时,它会变成僵尸。 永远不应该有很多,因为每次新进程启动(或调用 active_children() )时,所有尚未加入的已完成进程都将被加入。 同时调用已完成进程的 Process.is_alive 将加入该进程。 即便如此,明确加入您启动的所有流程可能是一种很好的做法。


实际上,我正在尝试创建一个进程监视器功能来监视所有进程的内存和 CPU 使用情况。

为此,您应该查看psutil模块。

如果你只是想暂停(不是kill)的过程,如果内存消耗得高,你也许可以从我的回答得出一些启示这里

terminate() 进程将不允许重新启动该进程,但可以使用 kill() 进程并且可以重新启动该进程。 有用

import time
from multiprocessing import Process

def worker ():
    while True:
        print "Inside the worker"
        time.sleep(10)


p1 = Process(target=worker,name="worker")
p1.start()
#p1.join()

time.sleep(3)

p1.kill()
print "after kill"
time.sleep(3)


p1.start()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM