Bir imap_unordered()
çağrı ile başarılı bir şekilde çoklu işlem Havuzu görevi yapan bir komut dosyam var :
p = multiprocessing.Pool()
rs = p.imap_unordered(do_work, xrange(num_tasks))
p.close() # No more work
p.join() # Wait for completion
Bununla birlikte, benim num_tasks
250.000 civarında ve bu nedenle join()
ana iş parçacığını 10 saniye kadar kilitliyor ve ana işlemin kilitli olmadığını göstermek için aşamalı olarak komut satırına yankılanmak istiyorum. Gibi bir şey:
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)
Sonuç nesnesi veya havuzun kendisi için kalan görevlerin sayısını gösteren bir yöntem var mı? Bir multiprocessing.Value
nesneyi sayaç olarak kullanmayı denedim ( görevini yaptıktan sonra do_work
bir counter.value += 1
eylem çağırır ), ancak sayaç artışı durdurmadan önce toplam değerin yalnızca ~% 85'ine ulaşıyor.