连接后重新启动Python多处理

时间:2015-04-30 18:17:29

标签: python multiprocessing python-multiprocessing

我正在使用python多处理过程。为什么我不能在退出并启动加入后启动或重新启动进程。该过程已经消失,但在实例化的类中,在进程终止并且我进行连接后,_popen未设置为None。如果我再试一次,它会告诉我,我不能再开始一个过程。

2 个答案:

答案 0 :(得分:2)

来自Python多处理文档。

  

开始()

     

启动流程的活动。

     

每个进程对象最多只能调用一次。它安排在一个单独的进程中调用对象的run()方法。

Process对象只能运行一次。如果需要重新运行相同的例程(目标参数),则必须实例化一个新的Process对象。

这是因为Process对象正在封装唯一的OS实例。

提示:不要使用Python Thread和Process对象的内部,你可能会受到严重的伤害。 您正在查看的_popen属性是Process对象用于了解子OS操作系统进程何时消失的标记。它实际上是一个管道,它用于阻止join()调用,直到进程没有终止。

答案 1 :(得分:-2)

从您的问题我们可以猜测,您正在谈论什么。你在使用subprocess吗?你是如何开始你的过程的?通过调用call()Popen()

如果我猜对了:

只需保留args来自subprocess的{​​{1}}列表,然后再次调用该命令即可重启您的流程。子进程的实例(例如Popen实例)表示正在运行的进程(使用一个 PID),而不是可以多次运行的抽象应用程序。

e.g:

args = ['python', 'myscript.py']
p = Popen(args)
p.wait()
p = Popen(args)
...