multiprocessing
मॉड्यूल के लिए प्रलेखन दिखाता है कि multiprocessing.Process
के साथ शुरू की गई प्रक्रिया में कतार कैसे पारित करें। लेकिन मैं apply_async
के साथ शुरू की गई असीमित कार्यकर्ता प्रक्रियाओं के साथ एक कतार कैसे साझा कर सकता हूं? मुझे गतिशील शामिल होने या किसी और चीज की आवश्यकता नहीं है, श्रमिकों के लिए एक बार (बार-बार) अपने परिणामों को आधार पर रिपोर्ट करने का एक तरीका है। RuntimeError: Queue objects should only be shared between processes through inheritance
:कई प्रक्रियाओं के बीच परिणाम कतार साझा करना
import multiprocessing
def worker(name, que):
que.put("%d is done" % name)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=3)
q = multiprocessing.Queue()
workers = pool.apply_async(worker, (33, q))
इस के साथ विफल रहता है। मैं समझता हूं कि इसका क्या अर्थ है, और मैं पिकलिंग/अनपिकलिंग (और सभी विशेष विंडोज प्रतिबंध) की आवश्यकता के बजाय विरासत की सलाह को समझता हूं। लेकिन कैसे मैं कतार को इस तरह से पास करता हूं जो काम करता है? मुझे कोई उदाहरण नहीं मिल रहा है, और मैंने कई विकल्पों की कोशिश की है जो विभिन्न तरीकों से विफल रही हैं। कृपया मदद करें?
ऐसा हुआ, धन्यवाद! मेरे मूल कोड में एसिंक कॉल के साथ एक असंबंधित समस्या थी, इसलिए मैंने आपके उत्तर में भी फिक्स कॉपी किया। – alexis