Многопроцессный модуль Pythons (с укропом) дает бесполезную ошибку AssertionError
Я установил dill/pathos и его зависимости (с некоторыми трудностями), и я пытаюсь выполнить функцию над несколькими процессами. Класс / атрибут Model(self.xml,self.exp_data,i).SSR
Он выполнен на заказ и зависит от загруженности других пользовательских функций, поэтому я заранее извиняюсь за то, что не смог предоставить "работающий" код. Вкратце, однако, он берет некоторые экспериментальные данные, интегрирует систему ODE с модулем pysces в python и вычисляет сумму квадратов (SSR
). Цель распараллеливания этого кода состоит в том, чтобы ускорить этот расчет с несколькими наборами параметров.
Код:
import multiprocess
def evaluate_chisq(pop):
p = multiprocess.Pool(8)
res= p.map(lambda i:Model(self.xml,self.exp_data,i).SSR , pop)#calcualteSSR with this parameter set
return res
Я получаю сообщение об ошибке:
File "C:\Anaconda1\lib\site-packages\multiprocess\pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
File "C:\Anaconda1\lib\site-packages\multiprocess\pool.py", line 567, in get
raise self._value
AssertionError
Тогда я попытался с помощью map_async
:
def evaluate_chisq(pop):
p = multiprocess.Pool(8)
res= p.map_async(lambda i:Model(self.xml,self.exp_data,i).SSR , pop)#calcualteSSR with this parameter set
return res
который возвращает <multiprocess.pool.MapResult object at 0x0000000014AF8C18>
объект, который дает мне ту же ошибку, когда я пытаюсь использовать MapResult
метод `get'
File "C:\Anaconda1\lib\site-packages\multiprocess\pool.py", line 567, in get
raise self._value
AssertionError
Кто-нибудь знает, что я делаю не так?
1 ответ
На Windows вам нужно использовать freeze_support
от __main__
,