Многопроцессорность в al oop, ошибка «Пул не запущен» - PullRequest
6 голосов
/ 12 февраля 2020

Я пытаюсь выполнить некоторые вычисления в l oop, каждый расчет создает, использует и закрывает пул. Но расчет выполняется только один раз, а затем выдает ошибку: «Пул не запущен». Конечно, старый не работает, но не следует ли создавать новый?

Ниже приведен упрощенный пример, похожий на мой код. Более странно, в моем действительном коде вычисления выполняются 7 раз перед сбоем, так что я действительно растерялся, в чем проблема. Любой совет приветствуется!

from pathos.multiprocessing import ProcessingPool as Pool

def add_two(number):  
    return (number + 2)

def parallel_function(numbers):
    pool = Pool(10)
    result = pool.imap(add_two, numbers)
    pool.close()
    pool.join()    
    return(result)

sets=[
    [1, 2, 3],
    [2, 3, 4],
    [3, 4, 5]
]

for one_set in sets:
    x = parallel_function(one_set)
    for i in x:
        print(i)

Ответы [ 2 ]

3 голосов
/ 12 февраля 2020

Это ограничение pathos, которое реализует пул с использованием шаблона синглтона.

Это связанный билет на выдачу .

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

0 голосов
/ 12 февраля 2020

Далее предполагается, что пафос действует так же, как многопроцессорная. Если бы вы использовали многопроцессорную обработку, то могли бы возникнуть следующие проблемы.

Проблема в том, что ваша функция закрывает пул до завершения imap:

def parallel_function(numbers):
    pool = Pool(10)
    result = pool.imap(add_two, numbers)
    pool.close()
    pool.join()    
    return(result)

Это должно быть записано как:

def parallel_function(numbers):
    with Pool(10) as pool:
       yield from pool.imap(add_two, numbers)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...