Python Pathos Multiprocessing: как завершить работу пула при определенных условиях?

Мне нужно запустить кучу параллельных процессов, но я не могу использовать стандартный многопроцессорный пакет, так как его сериализация с помощью pickle не работает для более сложных объектов. Поэтому в настоящее время я использую pathos.multiprocessing, который использует укроп для сериализации, и в этом отношении он работает безупречно.

Тем не менее, я хотел бы иметь условие выхода, чтобы все процессы завершались, как только результат процесса соответствует определенному условию (я вычисляю объективные значения для задачи оптимизации, и я хочу, чтобы все процессы останавливались, как только результат из процесс хуже, чем любой из предыдущих результатов).

Для стандартного многопроцессорного пакета я нашел это решение (взято из https://stackoverflow.com/a/21491438/15799363) . Могу ли я сделать что-то подобное с pathos.multiprocessing? Я не мог понять, как передать функцию обратного вызова процессам с пафосом.

from random import random
from multiprocessing import Pool
from time import sleep

def add_something(i):
    # Sleep to simulate the long calculation
    sleep(random() * 30)
    return i + 1

def run_my_process():
    # Create a process pool
    pool = Pool(100)

    # Callback function that checks results and kills the pool
    def check_result(result):
        print(result)
        if result == 90:
            pool.terminate()

    # Start up all of the processes
    for i in range(100):
        pool.apply_async(add_something, args=[i], callback=check_result)

    pool.close()
    pool.join()

if __name__ == '__main__':
    run_my_process()

person Nick    schedule 30.04.2021    source источник