我对Python比较陌生,我正在尝试创建一个包含许多不同进程的队列。总共有3个进程称为Process1,Process2和Process3。当Process1完成其执行时,我希望将新进程Process2添加到队列中。当Process2完成其执行时,我希望将新进程Process3添加到队列中。
我想要使用队列的原因是因为如果Process2失败,我想将此任务移到队列的后面,以便以后可以执行。
这是我目前的实施:
from multiprocessing import Process, Queue
import time
class Process1(Process):
def __init__(self, queue):
super(Process1, self).__init__()
self.queue = queue
def run(self):
print 'I am Process 1'
time.sleep(1)
print 'Done process 1'
p2 = Process2(self.queue)
self.queue.put(p2)
p2.start()
p2.join()
class Process2(Process):
def __init__(self, queue):
super(Process2, self).__init__()
self.queue = queue
def run(self):
print 'I am Process 2'
time.sleep(2)
print 'Done process 2'
p3 = Process3(self.queue)
self.queue.put(p3)
p3.start()
p3.join()
class Process3(Process):
def __init__(self, queue):
super(Process3, self).__init__()
self.queue = queue
def run(self):
print 'I am Process 3'
time.sleep(3)
print 'Done process 3'
if __name__ == '__main__':
queue = Queue()
p1 = Process1(queue)
p1.start()
p1.join()
执行此代码时,我收到此错误:
RuntimeError: Queue objects should only be shared between processes through inheritance.
我真的无法理解Python进程和队列。我曾尝试阅读Python的文档,但我无法找到我想要做的解决方案。如果有人能为我提供非常棒的背景阅读。谢谢!
答案 0 :(得分:1)
多处理队列仅由进程直接子进程使用。通过让Process1创建Process2和Process2创建Process3,您正在尝试将队列交给进程孙子孙女和曾孙子孙女。您需要让您的顶级流程(主要中的代码)决定何时需要创建子项,并且还应该保留处理失败子项和重新排队的结果。通常,顶级流程将在流程工作完成时根据结果对象做出决策。