2011-03-31 9 views
5

मैं नौकरियों है कि मुझे लगता है कि ऐसा करने के लिए समानांतर और का उपयोग कर अजगर की बहु मॉड्यूल में चलाना चाहते हैं का एक सेट के साथ एक कतार पॉप्युलेट कर रहा हूँ। नीचे दिए गए कोड स्निपेट:पायथन Multiprocessing कतार

['a', 'b'] 

क्यों कतार सभी नौकरियों के साथ आबादी वाले नहीं हो रही है:

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

जब मैं queue.get() मैं निम्नलिखित मिलता है?

उत्तर

13

कतार वास्तव में आबादी वाले geting है। प्रत्येक बार जब आप किसी ऑब्जेक्ट को कतार में डालते हैं तो आपको 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

आह .. मैं इसे अभी समझता हूं .. धन्यवाद !!! –

+0

आपका स्वागत है। –

12

कतार अपने सभी नौकरियों के साथ आबादी वाले हो रही है। queue.get()

निकालें और कतार से एक आइटम वापस आ जाएगी।

एक आइटम विलक्षण है। यदि आप कतार को निकालना चाहते हैं, तो बस अपने .get() को लूप में रखें, लेकिन Empty अपवाद को पकड़ना सुनिश्चित करें।

+3

यह क्यों कम किया गया था? मैं उलझन में हूं.. –