Многопроцессный модуль 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__,

См. https://docs.python.org/2/library/multiprocessing.html.

Другие вопросы по тегам