У меня следующая проблема.Если мой код разделен на разные файлы, я не могу просто импортировать и отправить функцию в кластер, потому что мои локальные файлы отсутствуют на рабочих машинах.Чтобы решить проблему, мне нужно вручную объединить файлы в один.Это можно сделать относительно просто для небольших примеров, но большой проект, который разделен на несколько папок, занимает очень много времени.Пример:
localfile.py
файл:
def custom():
print("Remote run")
return
Теперь давайте попробуем передать импортированную функцию в кластер, cluster.py
файл:
import localfile
x = client.submit(localfile.custom)
x.result()
# Import error here, details below
-
# The protocol we write by default. May be less than HIGHEST_PROTOCOL.
File "/usr/local/lib/python3.6/site-packages/cloudpickle/cloudpickle.py", line 944, in subimport
ModuleNotFoundError: No module named 'localfile'
Как видите, рабочие не могут найти локальные файлы Python, поэтому задача не выполнена.
Можно ли как-нибудь отправить мой маринованный код с импортированными локальными файлами?Я понимаю, что возможное решение - просто загрузить локальные файлы рабочим, но когда код изменяется очень часто, а ваш кластер динамический, это не элегантное решение.Было бы здорово иметь возможность автоматически объединять ваш код client.py с localfile.py, выбирать его и отправлять в планировщик.Это как-то возможно?У вас есть другие идеи, как решить эту проблему?Спасибо!