【问题标题】:Python Multiprocessing - Process Termination (cannot start a process twice)Python Multiprocessing - 进程终止(不能两次启动进程)
【发布时间】:2016-02-27 19:40:08
【问题描述】:

谁能告诉我为什么下面的代码会出现“无法启动进程两次”的错误?据我估计,p1 和 p2 应该已经被 p.terminate() 命令强制关闭了

编辑:添加了更多代码以提供上下文 - 想提出一个简单的示例,但省略了 while 循环

import time
import os
from multiprocessing import Process
import datetime

def a():
    print ("a starting")
    time.sleep(30)
    print ("a ending")

def b():
    print ("b starting")
    time.sleep(30)
    print ("b ending")

morning = list(range(7,10))
lunch = list(range(11,14))
evening = list(range(17,21))
active = morning + lunch + evening

if __name__=='__main__':
    p1 = Process(target = a)
    p2 = Process(target = b)
    while True:
        while (datetime.datetime.now().time().hour) in active:
            p1.start()
            p2.start() 
            time.sleep(5)
            p1.terminate()
            p2.terminate()
            time.sleep(5)
        else:
            print ("Outside hours, waiting 30 mins before retry")
            time.sleep(1800)

【问题讨论】:

  • 为什么有两个p1.start()p2.start()
  • 哦,对不起!有一个 while 循环封装了它,以便在一天中的某些时间一遍又一遍地运行代码

标签: python python-3.x multiprocessing python-multiprocessing


【解决方案1】:

它说您不能两次启动一个进程。这正是您在终止后再次调用p1.start()p2.start() 时所做的事情。尝试像一开始那样重新创建它们。

p1.terminate()
p2.terminate()
time.sleep(5)
p1 = Process(target = a)
p2 = Process(target = b)
p1.start()
p2.start()

【讨论】:

  • 啊!我没有意识到您必须不断重新定义流程。我将错误“你不能启动一个进程两次”解释为“你不能重新运行一个已经在运行的进程”,所以我认为 terminate() 有错误。对我来说,必须一遍又一遍地重新定义流程似乎不合逻辑
  • 4 年后,这对我有帮助,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多