You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker多容器环境下Dask Distributed调用upload_file出现FileNotFoundError的解决方案咨询

解决Dask Client upload_file找不到文件的问题

你遇到的核心问题大概率是相对路径解析偏差——虽然你说predict_worker.py和Flask运行代码在同一目录,但Flask进程的当前工作目录(CWD)可能和脚本所在目录不一致,导致相对路径无法定位到目标文件。下面是几个针对性的解决方案:

1. 使用绝对路径指定文件(最可靠方案)

放弃依赖相对路径,通过脚本的绝对路径拼接目标文件路径,这样无论Flask进程的工作目录是什么,都能精准找到文件。修改代码如下:

import os
from dask.distributed import Client

# 获取当前Flask脚本所在的绝对目录
current_script_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接predict_worker.py的绝对路径
predict_file_path = os.path.join(current_script_dir, 'predict_worker.py')

# 初始化Dask Client并上传文件
dask_client = Client('127.0.0.1:8786')
dask_client.upload_file(predict_file_path)

# 确保myFunc是predict_worker.py中定义的函数,或者能被Worker正确加载
from predict_worker import myFunc
results = dask_client.map(myFunc, [1])

2. 验证Flask进程的当前工作目录

可以在Flask代码中加入调试代码,确认进程的实际工作目录和文件存在性:

import os
print("当前进程工作目录:", os.getcwd())
print("Flask脚本所在目录:", os.path.dirname(os.path.abspath(__file__)))
print("脚本目录下的文件列表:", os.listdir(os.path.dirname(os.path.abspath(__file__))))

查看Flask容器的日志,如果当前工作目录和脚本目录不一致,那就是相对路径失效的直接原因。这种情况下,除了用绝对路径,也可以在启动Flask时切换到脚本所在目录(比如在Dockerfile中用WORKDIR指令指定脚本目录)。

3. 检查Docker容器内的文件状态

确保predict_worker.py确实被正确复制到了Flask容器的对应目录:

  • 进入Flask容器执行ls -l /path/to/flask/script/dir,查看文件是否存在且具备可读权限(权限至少为r--)。
  • 如果是通过Dockerfile或Docker Compose构建容器,确认COPY指令正确复制了该文件。

额外注意事项

  • 文件上传后,Dask Worker会将其添加到Python的sys.path中,所以提交任务时要确保任务代码能正确导入predict_worker.py中的内容(比如上面示例中从predict_worker导入myFunc)。
  • 如果myFunc是在Flask脚本中定义的,而非predict_worker.py内,需要确保该函数可被序列化,或者将函数所在的文件也一并上传。

内容的提问来源于stack exchange,提问作者ps0604

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:59:09