मैं अपने प्रोजेक्ट में मल्टीप्रोसेसिंग का उपयोग कर रहा हूं। मेरे पास एक कार्यकर्ता कार्य है जो परिणामों को कतार में डालता है। सब कुछ ठीक काम करता है। लेकिन एक्स के आकार के रूप में बढ़ता है (मेरे मामले में एक्स एक सरणी है) कुछ गलत हो गया।पाइथन में मल्टीप्रोसेसिंग अवरुद्ध
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
मैं कुछ परीक्षण करता हूं। और समस्या वास्तव में कतार में परिणाम डालने की तरह दिखती है अगर मैं परिणाम सब कुछ नहीं डालता लेकिन फिर कोई उद्देश्य नहीं होगा।
आप कभी भी नई प्रक्रिया में कतार वस्तु को पारित नहीं कर रहे हैं। 'प्रक्रिया 'का' तर्क 'भी' tuple' होना चाहिए। इसे 'args = (कतार, i)' में बदलने का प्रयास करें। आपकी 'queue.get' को कुछ ब्रैकेट की भी आवश्यकता है ताकि यह' queue.get() 'हो। – Wessie