На моем узле Dask Jupyter у меня есть следующая структура файла:
main/
src/
subfolder/
file1.py
file2.py
file3.py
main.py
Код в main.py
примерно выглядит так:
# main.py
from distributed import Client
from src.subfolder.file1 import important_function
# ...
cluster_address = os.environ.get('CLUSTER_ADDRESS', 'dask-scheduler:8786')
client = Client(cluster_address)
arg1, arg2 = ...
future = client.submit(important_function, arg1, arg2)
result = future.result()
На самом деле история сложнеетак как я создаю рабочих на основе шаблона. Но тем не менее, я думаю, что это иллюстрирует проблему. Когда я запускаю этот код, я получаю следующее сообщение об ошибке:
Traceback (most recent call last):
...
File "main.py", line 151, in ...
result = future.result()
File "/opt/conda/lib/python3.7/site-packages/distributed/client.py", line 222, in result
raise exc.with_traceback(tb)
File "/opt/conda/lib/python3.7/site-packages/distributed/protocol/pickle.py", line 59, in loads
return pickle.loads(x)
ModuleNotFoundError: No module named 'src'
Что я пробовал: я копировал все исходные папки на рабочий, когда я порождаю рабочий. Все исходные файлы попадают в /build
на рабочем. Таким образом, все содержимое main
в приведенном выше примере фактически находится в каталоге /build
на рабочем месте. Думаю, мне нужно как-то сказать работнику, что получаемые им функции должны выполняться в /build
как их рабочий каталог. Это путь? У кого-нибудь есть идеи, как это решить?