在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
中作为其工作目录执行。这是要走的路吗?有人对如何解决这个问题有任何想法吗?
答案 0 :(得分:0)
好吧,我知道了。在important_function()
内部,我必须像这样追加到sys路径:
def important_function(arg1, arg2):
sys.path.append("/build")
# more import statements here