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 % 만 얻습니다.