Как завершить пул, когда любой из процессов завершается? - PullRequest
0 голосов
/ 12 октября 2018

Я использовал следующий код, как рекомендовано, но все равно пул не завершается после того, как первый работник найдет совпадение.Желаемый результат состоит в том, чтобы иметь 20 процессов, выполняющих функцию f, и когда любой из них находит совпадение, пул должен быть завершен, вместо этого происходит то, что я должен ждать, пока все рабочие не найдут совпадение.

from multiprocessing import Pool
import numpy as np


def f(z):..Output omitted


class Worker():
    def __init__(self, workers):
        self.pool = Pool(processes=workers)

    def callback(self, result):
        if result:
            self.pool.terminate()

    def do_job(self):

        self.pool.map_async(f,range(1,20), callback=self.callback)
        self.pool.close()
        self.pool.join()


if __name__=="__main__":
    w = Worker(20)
    w.do_job()
...