簡體   English   中英

Python多處理隊列為空

[英]Python multiprocessing queue is empty

我有一個令人尷尬的並行代碼,它創建一個數組列表,並且想對其進行並行化(這是我第一次使用python的多處理技術,因此我仍在掌握這些概念)。 runNramps(* args)返回五個數組t1,c1,e1,m1和d1。 我想在多個線程中運行它,並將所有作業的答案結合在一起。

這是我試圖通過在多個進程中運行來並行化的代碼。 我的作業似乎可以執行並正確關閉,但是隊列為空,queue.get()不返回任何內容。 我想我沒有將所有輸出合並在一起的方法,但是我在SO / google上找不到任何好的示例。

這是我的代碼的線程版本(我想對上一個函數進行最小的更改,然后多次調用,將結果連接到一個數組中)。

def runPramps(numramps,rmpslope,nframes,cosmag=0,method='2pt',thresh=1.0):

    output = mp.Queue()
    processes = [mp.Process(target=runNramps, args=(numramps,rmpslope,nframes,cosmag,method,thresh)) for x in range(4)] #4 processes for example

    for p in processes:
            p.start()
            print "started", p

    for p in processes:
            p.join()
            print 'ended',p


    results = output.get(False) #it hangs here
    return results

我確定自己正在運行並結束進程,因此我有一個小錯誤/誤解。

非常感謝您的幫助!

問題是由於您在耗盡隊列之前加入了進程。

您可以查看“使用隊列的加入過程”下的多處理准則 ,以更好地說明問題。

只需交換聯接和Queue.get邏輯,一切就可以正常工作。

不過,我寧願使用一群工人來解決您的問題。

暫無
暫無

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

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