Tengo un pequeño grupo de trabajadores (4) y una lista muy grande de tareas (5000 ~). Estoy usando un grupo y enviando las tareas con map_async(). Debido a que la tarea que estoy ejecutando es bastante larga, estoy forzando un tamaño de chunksize de 1 para que un proceso largo no pueda contener algunos más cortos.Python: ¿Cómo puedo verificar el número de tareas pendientes en un multiprocesamiento.Pool?
Lo que me gustaría hacer es verificar periódicamente cuántas tareas quedan pendientes. Sé que a lo sumo 4 estarán activos. Me preocupa cuántos quedan por procesar.
He buscado en Google y no puedo encontrar a nadie que haga esto.
Algunos código simple para ayudar:
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
Debo notar que estoy usando python2.6 en un sistema RHEL-6, sin embargo, estoy abierto a ejemplos en diferentes versiones/plataformas. – jkeating
variable estática que se disminuye cuando se completa la tarea? (y se incrementa cuando la tarea comienza obviamente). – Enders
Las tareas no "comienzan" hasta que el trabajador las recibe. Supongo que si creara un global que fuera del tamaño de las tareas a realizar, entonces lo disminuiría cada vez que comenzara una tarea que podría hacerlo, pero eso es un poco incómodo y requiere un poco de seguridad en el hilo. – jkeating