में multiprocessing.queue (-1) को खाली करने का पसंदीदा तरीका मैं वर्तमान में एक कतार में सभी आइटम खींचना चाहता हूं। एक और थ्रेड लगातार दूसरे छोर में वस्तुओं को डाल रहा है, और हर अवधि में मैं वर्तमान में कतार में सभी आइटम प्राप्त करना चाहता हूं।पायथन
वहाँ पसंद करते हैं करने के लिए किसी कारण है:
res = []
while q.qsize > 0 :
res.append(q.get())
या
res = []
while True :
try :
res.append(q.get(block=False))
except Queue.Empty :
break
अब डॉक्स विशेष रूप से कहना है कि qsize()> 0 कतार एक get पर अवरुद्ध करने से नहीं रोका जाएगा, लेकिन क्या यह केवल उस मामले में सच है जहां आउटपुट से कई धागे ले सकते हैं?
कतार। qsize() कतार के अनुमानित आकार को वापस करें। नोट, qsize()> 0 इस बात की गारंटी नहीं देता है कि बाद में मिलता है() ब्लॉक नहीं करेगा, और न ही qsize() < अधिकतम गारंटी जो डाल देगा() ब्लॉक नहीं करेगा।
क्या इसका मतलब यह है कि दूसरा रूप हमेशा पसंद किया जाना चाहिए? ईएएफपी और वह सब? साथ ही, q.qsize() को कॉल करने के लिए कोई कीमत है? क्या यह गिनने के लिए कतार के दूसरे छोर को अवरुद्ध करता है?
मुझे लगता है कि मैंने दूसरे फॉर्म का उपयोग करने में खुद से बात की है लेकिन यह मेरे लिए बहुत कम साफ है।