Tôi có một tập lệnh đang thực hiện thành công một nhóm tác vụ Nhóm đa xử lý với imap_unordered()
lệnh gọi:
p = multiprocessing.Pool()
rs = p.imap_unordered(do_work, xrange(num_tasks))
p.close() # No more work
p.join() # Wait for completion
Tuy nhiên, của tôi num_tasks
là khoảng 250.000 và do đó, chuỗi join()
khóa chính trong 10 giây hoặc lâu hơn, và tôi muốn có thể lặp lại dòng lệnh một cách tăng dần để hiển thị quá trình chính không bị khóa. Cái gì đó như:
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)
Có phương thức nào cho đối tượng kết quả hoặc chính nhóm cho biết số lượng tác vụ còn lại không? Tôi đã thử sử dụng một multiprocessing.Value
đối tượng làm bộ đếm ( do_work
gọi một counter.value += 1
hành động sau khi thực hiện tác vụ của nó), nhưng bộ đếm chỉ nhận được ~ 85% tổng giá trị trước khi ngừng tăng.