Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python多处理-进程终止(不能启动一个进程两次)_Python_Python 3.x_Multiprocessing_Python Multiprocessing - Fatal编程技术网

Python多处理-进程终止(不能启动一个进程两次)

Python多处理-进程终止(不能启动一个进程两次),python,python-3.x,multiprocessing,python-multiprocessing,Python,Python 3.x,Multiprocessing,Python Multiprocessing,有人能告诉我为什么下面的代码给出错误“不能启动一个进程两次”吗?据我估计,p1和p2应该已经被p.terminate()命令强制关闭了 编辑:添加了更多的代码来提供上下文-想要给出一个简单的示例,但忽略了while循环 import time import os from multiprocessing import Process import datetime def a(): print ("a starting") time.sleep(30) print ("

有人能告诉我为什么下面的代码给出错误“不能启动一个进程两次”吗?据我估计,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()
时所做的。试着像一开始那样重新创建它们

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

为什么有两个
p1.start()
p2.start()
?哦,对不起!有一个while循环封装了它,在一天中的特定时间反复运行代码!我没有意识到你必须不断地重新定义流程。我将错误“您无法启动一个进程两次”解释为“您无法重新运行已在运行的进程”,因此认为terminate()存在错误。4年后,我不得不一次又一次地重新定义流程,这似乎不合逻辑,这帮了我的忙,谢谢!