python multiprocessing pool worker

Python Multiprocess Pool. ¿Cómo salir de la secuencia de comandos cuando uno de los procesos de trabajo determina que no se necesita hacer más trabajo?



multiprocessing worker (1)

mp.set_start_method(''spawn'') total_count = Counter(0) pool = mp.Pool(initializer=init, initargs=(total_count,), processes=num_proc) pool.map(part_crack_helper, product(seed_str, repeat=4)) pool.close() pool.join()

Así que tengo un grupo de procesos de trabajo que hace algo de trabajo. Solo necesita encontrar una solución. Por lo tanto, cuando uno de los procesos de trabajo encuentra la solución, quiero detener todo.

Una forma en la que pensé fue simplemente llamando a sys.exit (). Sin embargo, eso no parece funcionar correctamente ya que se están ejecutando otros procesos.

Otra forma era verificar el valor de retorno de cada llamada a proceso (el valor de retorno de la función part_crack_helper) y terminar la llamada en ese proceso. Sin embargo, no sé cómo hacerlo cuando uso esa función de mapa.

¿Cómo debo lograr esto?


Puede usar devoluciones de llamada desde Pool.apply_async .

Algo como esto debería hacer el trabajo por usted.

from multiprocessing import Pool def part_crack_helper(args): solution = do_job(args) if solution: return True else: return False class Worker(): def __init__(self, workers, initializer, initargs): self.pool = Pool(processes=workers, initializer=initializer, initargs=initargs) def callback(self, result): if result: print "Solution found! Yay!" self.pool.terminate() def do_job(self): for args in product(seed_str, repeat=4): self.pool.apply_async(part_crack_helper, args=args, callback=self.callback) self.pool.close() self.pool.join() print "good bye" w = Worker(num_proc, init, [total_count]) w.do_job()