Python: Как я могу проверить количество ожидающих задач в multiprocessing.Pool?

У меня есть небольшой пул рабочих (4) и очень большой список задач (5000 ~). Я использую пул и отправляю задачи с помощью map_async (). Поскольку задача, которую я выполняю, довольно длинная, я устанавливаю размер блока равным 1, чтобы один длинный процесс не мог выдержать несколько более коротких.

Я бы хотел периодически проверять, сколько задач осталось представить. Я знаю, что активными будут не более четырех, меня беспокоит, сколько осталось обработать.

Я поискал в Google и не могу найти никого, кто бы это делал.

Вот простой код, который поможет:

import multiprocessing
import time

def mytask(num):
    print('Started task, sleeping %s' % num)
    time.sleep(num)

pool = multiprocessing.Pool(4)
jobs = pool.map_async(mytask, [1,2,3,4,5,3,2,3,4,5,2,3,2,3,4,5,6,4], chunksize=1)
pool.close()

while True:
    if not jobs.ready():
        print("We're not done yet, %s tasks to go!" % <somethingtogettasks>)
        jobs.wait(2)
    else:
        break
9
задан jkeating 5 April 2011 в 05:00
поделиться