2011-03-31 126 views
5

我正在用一組我希望並行運行的作業填充一個隊列,並使用python的多處理模塊來做這件事。代碼片斷如下:Python多處理隊列

import multiprocessing 
from multiprocessing import Queue 
queue = Queue() 
jobs = [['a', 'b'], ['c', 'd']] 
for job in jobs: 
    queue.put(job) 

當我做queue.get()我得到以下幾點:

['a', 'b'] 

爲什麼隊列沒有得到填充所有的工作?

回答

13

該隊列實際上是填充填充。每次將對象放入隊列時,都需要調用queue.get()。所以你只需要再次調用queue.get()。

>>> import multiprocessing 
>>> from multiprocessing import Queue 
>>> queue = Queue() 
>>> jobs = [['a', 'b'], ['c', 'd']] 
>>> for job in jobs: 
    queue.put(job) 


>>> queue.get() 
['a', 'b'] 
>>> queue.get() 
['c', 'd'] 
+0

啊..我現在明白了..謝謝!!! – 2011-03-31 21:10:06

+0

不客氣。 – 2011-03-31 21:11:48

12

該隊列正在填充您的所有工作。 queue.get()

刪除,並從 返回隊列項目

一個項目是單數。如果您想排空隊列,那麼只需將.get()置於循環中,但一定要注意Empty例外。

+3

爲什麼這會降低投票率?我很困惑.. – 2012-07-10 22:17:29