У меня есть проект, структурированный следующим образом:
- topmodule/
- childmodule1/
- my_func1.py
- childmodule2/
- my_func2.py
- common.py
- __init__.py
Из моего ноутбука Jupyter на краевом узле кластера Dask я делаю следующее
from topmodule.childmodule1.my_func1 import MyFuncClass1
from topmodule.childmodule2.my_func2 import MyFuncClass2
Затем яЯ создаю распределенный клиент и отправляю работу следующим образом:
client = Client(YarnCluster())
client.submit(MyFuncClass1.execute)
Эта ошибка выходит, потому что у рабочих нет файлов topmodule.
"/mnt1/yarn/usercache/hadoop/appcache/application_1572459480364_0007/container_1572459480364_0007_01_000003/environment/lib/python3.7/site-packages/distributed/protocol/pickle.py", line 59, in loads return pickle.loads(x) ModuleNotFoundError: No module named 'topmodule'
Так что я пытался сделатьэто - я пытался загрузить каждый файл в "topmodule". Файлы прямо под "topmodule", похоже, загружаются, а вложенные - нет. Ниже то, о чем я говорю;
Код:
from pathlib import Path
for filename in Path('topmodule').rglob('*.py'):
print(filename)
client.upload_file(filename)
Вывод на консоль:
topmodule/common.py # processes fine
topmodule/__init__.py # processes fine
topmodule/childmodule1/my_func1.py # throws error
Трассировка:
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-13-dbf487d43120> in <module>
3 for filename in Path('nodes').rglob('*.py'):
4 print(filename)
----> 5 client.upload_file(filename)
~/miniconda/lib/python3.7/site-packages/distributed/client.py in upload_file(self, filename, **kwargs)
2929 )
2930 if isinstance(result, Exception):
-> 2931 raise result
2932 else:
2933 return result
ModuleNotFoundError: No module named 'topmodule'
Мой вопрос - как я могу загрузить всюмодуль и его файлы рабочим? Наш модуль большой, поэтому я хочу избежать его реструктуризации только для этой проблемы, если только метод, которым мы структурируем модуль, не имеет принципиальных недостатков.
Или - есть ли лучший способ, чтобы все работники, работающие в Dask, понимали модуливозможно из репозитория git?