如何将源文件传输到Dask工作者?

时间:2019-11-07 16:31:14

标签: python dask

在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中作为其工作目录执行。这是要走的路吗?有人对如何解决这个问题有任何想法吗?

1 个答案:

答案 0 :(得分:0)

好吧,我知道了。在important_function()内部,我必须像这样追加到sys路径:

def important_function(arg1, arg2):

    sys.path.append("/build")
    # more import statements here