我在我的項目中使用多處理。我有一個將結果放入隊列的工作函數。一切正常。但隨着x的大小增加(在我的情況下,x是一個數組)出了問題。這裏是我的代碼的簡化版本:Python中的多處理被阻止
def do_work(queue, x):
result = heavy_computation_function(x)
queue.put(result) # PROBLEM HERE
def parallel_something():
queue = Queue()
procs = [Process(target=do_work, args=i) for i in xrange(20)]
for p in procs: p.start()
for p in procs: p.join()
results = []
while not queue.empty():
results.append(queue.get)
return results
我在系統中看到監控蟒蛇流程工作,但隨後事情發生,所有進程都在運行,但什麼都不做。這是我輸入ctrl-D時得到的結果。
pid, sts = os.waitpid(self.pid, flag)
KeyboardInterrupt
我做了一些測試。如果我不把結果放在一切正常的地方,那麼這個問題看起來好像是把結果放在隊列中,但那樣就沒有用處。
您似乎從不將隊列對象傳遞給新進程。 'Process'的'args'應該是'tuple'。嘗試將其更改爲'args =(queue,i)'。你的'queue.get'也需要一些括號,以便它成爲'queue.get()'。 – Wessie