我有一个结构如下的项目;
- topmodule/
- childmodule1/
- my_func1.py
- childmodule2/
- my_func2.py
- common.py
- __init__.py
在Dask群集边缘节点上的Jupyter笔记本中,我正在执行以下操作
from topmodule.childmodule1.my_func1 import MyFuncClass1
from topmodule.childmodule2.my_func2 import MyFuncClass2
然后我要创建一个分布式客户端并按以下方式发送工作;
client = Client(YarnCluster())
client.submit(MyFuncClass1.execute)
出现此错误是因为工作人员没有topmodule文件。
"/mnt1/yarn/usercache/hadoop/appcache/application_1572459480364_0007/container_1572459480364_0007_01_000003/environment/lib/python3.7/site-packages/distributed/protocol/pickle.py", line 59, in loads return pickle.loads(x) ModuleNotFoundError: No module named 'topmodule'
所以我想做的是-我尝试上传“ topmodule”下的每个文件。直接在“ topmodule”下的文件似乎已上传,但嵌套的文件未上传。以下是我在说的;
代码:
from pathlib import Path
for filename in Path('topmodule').rglob('*.py'):
print(filename)
client.upload_file(filename)
控制台输出:
topmodule/common.py # processes fine
topmodule/__init__.py # processes fine
topmodule/childmodule1/my_func1.py # throws error
跟踪:
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-13-dbf487d43120> in <module>
3 for filename in Path('nodes').rglob('*.py'):
4 print(filename)
----> 5 client.upload_file(filename)
~/miniconda/lib/python3.7/site-packages/distributed/client.py in upload_file(self, filename, **kwargs)
2929 )
2930 if isinstance(result, Exception):
-> 2931 raise result
2932 else:
2933 return result
ModuleNotFoundError: No module named 'topmodule'
我的问题是-如何将整个模块及其文件上传到工作人员?我们的模块很大,因此我想避免只是为了这个问题而对其进行重组,除非我们构建模块的方式存在根本性的缺陷。
或者-是否有更好的方法让所有敏捷工作者理解git存储库中的模块?
答案 0 :(得分:0)
分别在每个文件上调用upload_file时,会丢失模块的目录结构。
如果要上传更全面的模块,可以将其打包为zip或egg文件,然后上传。
https://docs.dask.org/en/latest/futures.html#distributed.Client.upload_file