簡體   English   中英

用於多種類型流程的多處理流程隊列

[英]Multiprocessing process queues for multiple types of processes

我對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的文檔,但是在尋找解決方案時遇到了麻煩。 如果有人可以為我提供背景閱讀,那將是很棒的。 謝謝!

多進程隊列僅由進程的直接子進程使用。 通過讓Process1創建Process2和Process2創建Process3,您正在嘗試將隊列傳遞給流程的孫代和曾孫代。 您需要讓您的頂級流程( main中的代碼)決定何時需要創建子代,並且還應具有處理失敗子代和重新排隊的規則。 通常,完成流程工作時,頂級流程將根據結果對象做出決策。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM