pathos ProcessPool зависает при вызове метода импортированного объекта - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь запустить пул процессов из метода объекта и переключился на pathos после прочтения того, что dill может сериализовать классы, в которых pickle терпит неудачу. Однако у меня все еще есть проблемы с зависанием python при использовании пулов в объектах, созданных из импортированных классов. Например, следующий код работает при запуске в качестве отдельного файла.

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

# filename test.py
from pathos.pools import ProcessPool as Pool

def square(n):
    a = n*n
    return a 

class MyClass():
    def __init__(self, fcn, fcn_input):
        self.fcn = fcn
        self.fcn_input = fcn_input

    def run(self):
        p = Pool(4)
        results = p.map(self.fcn, self.fcn_input)
        print('Answer: '+str(results))

if __name__ == "__main__":    
    a = MyClass(square, list(range(10)))
    a.run()

>>> runfile('test.py')
Answer: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Это работает как ожидалось. Однако, если я пытаюсь сделать это через импорт из другого файла, ядро ​​python зависает, и мне приходится вручную перезагружать его. Любая идея, что я делаю здесь не так?

# filename test2.py
from test import MyClass, square
a = MyClass(square, list(range(10)))
a.run()

>>> runfile('test2.py')
 .... [kernel freezes]

Одна подсказка: если я запускаю test.py и , то test2.py в том же ядре, оба работают нормально. Зависание происходит только при первом запуске test2.py.

...