У меня есть собственный класс 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, но не смог найти разумного решения этой известной проблемы. ТИА !!