Распараллелить код python с вызовами пользовательских функций (один внутри другого) [уже пробовал несколько вариантов] - PullRequest
0 голосов
/ 09 мая 2020

У меня есть собственный класс A внутри file_A.ipynb, который я импортирую как часть другого ipynb, например:

import import_ipynb
from file_A import class_A

Моя конечная цель - использовать class_A и распространять каждый экземпляр class_A в каждом из моих процессов (у меня их 6).

instance1 = class A()
instance2 = class A() ....
#instance1 work on process 1
#instance2 work on process 2 etc....

Я уже пробовал несколько вариантов, например Joblib, Dask, pp, multiprocessing et c et c. Поскольку мой класс A уникален для моей машины, ни одна из хорошо известных многопроцессорных платформ не могла импортировать их при выполнении в нескольких процессах. Ближе всего к успеху я пришел к использованию pp, я смог дать ему dependency modules в качестве аргумента и попросить его импортировать определенные модули, но, похоже, у него были другие базовые c ошибки с вызовами функций, поэтому я перестал использовать этот пакет.

У меня с собой только этот код dask:

from dask.distributed import Client, progress
import dask



client = Client(threads_per_worker=4, n_workers=5)


def do(*args):

 i1 = class A ()
 #do something
 return i1



dask_worker = dask.delayed(do)
first_job = dask_worker(*args)
second_job = dask_worker(*args)

first_job.compute(scheduler = "processes", optimize_graph = True)
second_job.compute(scheduler = "processes", optimize_graph = True)

Приведенный выше код, очевидно, возвращает мне эту ошибку:

ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-11-486e60df17d0> in <module>
----> 1 first_job.compute(scheduler = "processes", optimize_graph = True)

I поймите, что мой класс A не виден Dask, и он не может импортировать мой класс c. Но я ищу способы сообщить Dask или любой другой среде параллельного программирования, что «эй, из этого пакета импортируйте этот класс и используйте его». Я не мог придумать, как это сделать до сих пор. Так что хотелось бы помощи сообщества.

PS: Я работаю на машине Windows. Я уже просмотрел многие SO, но не смог найти разумного решения этой известной проблемы. ТИА !!

...