আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা imap_unordered()
কল সহ সফলভাবে একটি মাল্টিপ্রসেসিং পুলের কাজগুলির সেট করে :
p = multiprocessing.Pool()
rs = p.imap_unordered(do_work, xrange(num_tasks))
p.close() # No more work
p.join() # Wait for completion
যাইহোক, আমার num_tasks
প্রায় 250,000, এবং তাই join()
10 সেকেন্ড বা তার বেশি সময়ের জন্য মূল থ্রেডটি লক হয়ে যায় এবং আমি প্রধান প্রক্রিয়াটি লক না থাকা দেখানোর জন্য ক্রমবর্ধমানভাবে কমান্ড লাইনে প্রতিধ্বনিত করতে সক্ষম হতে চাই। কিছুটা এইরকম:
p = multiprocessing.Pool()
rs = p.imap_unordered(do_work, xrange(num_tasks))
p.close() # No more work
while (True):
remaining = rs.tasks_remaining() # How many of the map call haven't been done yet?
if (remaining == 0): break # Jump out of while loop
print "Waiting for", remaining, "tasks to complete..."
time.sleep(2)
ফলাফল অবজেক্টের জন্য বা পুলে নিজেই কোনও পদ্ধতি রয়েছে যা বাকি কাজগুলির সংখ্যা নির্দেশ করে? আমি কোনও multiprocessing.Value
অবজেক্টকে কাউন্টার হিসাবে ব্যবহার করার চেষ্টা করেছি ( এর কাজটি করার পরে do_work
একটি counter.value += 1
ক্রিয়া কল করে ), তবে কাউন্টারটি বাড়ানো বন্ধ করার আগে মোট মূল্যের ~ 85% হয়ে যায়।