【发布时间】:2021-02-09 08:36:19
【问题描述】:
所以我有一个分布式的 dask 设置,调度程序在一个容器上运行,工作程序在另一个容器上运行。我在 AWS 上有类似的设置,其中调度程序在 EC2 实例上运行,而工作人员在另一台 EC2 机器的 docker 容器上。
我希望工作人员可以使用 python 文件。到目前为止,我还不想将它作为依赖项直接安装到工作人员,但想手动将此文件复制到工作人员,以便它在工作人员使用的 python 环境中可用。为此,我将其添加到 DOCKERFILE:
# syntax=docker/dockerfile:experimental
FROM daskdev/dask:2020.12.0
WORKDIR /src/
COPY ./python_file.py /src/python_file.py
基本上我希望 dask worker 能够在 python_file.py 中运行一个方法。所以我提交的方法如下:
client.submit(python_file.some_method, arg1, arg2)
这在我的本地 dask 设置上运行良好,并且工作人员能够反序列化此调用并运行该方法。不知何故,这在 AWS 设置中不起作用。工人一直在抱怨:
ModuleNotFoundError: No module named 'python_file'
调试:
- 我登录到 EC2 机器,我看到容器是活动的。
- 我进入了容器,我看到该文件也存在于我想要的位置(与我的本地完全一样)。
- 我运行了 python 并尝试导入模块,这也有效。
- 我运行了 `pickle.loads(b'\x80\x04\x95#\x00\x00\x00\x00\x00\x00\x00\x8c\python_file\x94\x8c\x0esome_method\x94\x93\x94. ') 并返回所需的方法。
如果所有这些都有效,那么工人仍然抱怨模块不存在的其他原因是什么?有没有其他人遇到过类似的情况?
【问题讨论】:
标签: python amazon-web-services docker amazon-ec2 dask