使用dask distributed我尝试提交一个位于另一个名为worker.py的文件中的函数。 在工人中我发现以下错误:
没有名为' worker'
的模块
然而,我无法弄清楚我在这里做错了什么......
以下是我的代码示例:
import worker
def run(self):
dask_queue = queue.Queue()
remote_queue = self.executor.scatter(dask_queue)
map_queue = self.executor.map(worker.run, remote_queue)
result = self.executor.gather(map_queue)
# Load data into the queue
for option in self.input.get_next_option():
remote_queue.put([self.server, self.arg, option])
这是在工人方面获得的完整追溯:
distributed.core - INFO - 无法反序列化 B' \ X80 \ X04 \ X95 \ X19 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ x8c \ x06worker \ X94 \ x8c \ nrun \ X94 \ X93 \ X94&#39。 Traceback(最近一次调用最后一次):文件 " /usr/local/lib/python3.5/dist-packages/distributed/core.py" ;,第74行, 在负载 return pickle.loads(x)ImportError:没有名为' worker' distributed.worker - 警告 - 无法反序列化任务Traceback (最近一次调用最后一次):文件 " /usr/local/lib/python3.5/dist-packages/distributed/worker.py" ;, line 496,在compute_one中 任务)文件" /usr/local/lib/python3.5/dist-packages/distributed/worker.py" ;, line 284,反序列化 function = loads(function)File" /usr/local/lib/python3.5/dist-packages/distributed/core.py" ;,第74行, 在负载 return pickle.loads(x)ImportError:没有名为' worker'
的模块
答案 0 :(得分:1)
编辑:请参阅MRocklin评论以获得更清洁的解决方案
实际上,如果要在dask worker中执行的代码在外部模块中,则必须从dask工作路径中知道它(它没有从客户端序列化到工作者)。
更改我的PYTHONPATH以确保工作人员知道该模块解决了问题。 在dask问题中发布了类似的问题:
答案 1 :(得分:1)
我面临类似的问题。创建dask图时,使用了来自python模块的函数。但是,辅助进程找不到python模块。
以下错误在工作人员控制台中显示。在这里,tasks.py包含了dask图中使用的worker函数。
[ worker 10.0.2.4 ] : ModuleNotFoundError: No module named 'tasks'
[ worker 10.0.2.4 ] : distributed.protocol.pickle - INFO - Failed to deserialize b'\x80\x04\x95\x14\x00\x00\x00\x00\x00\x00\x00\x8c\x05tasks\x94\x8c\x06ogs_mk\x94\x93\x94.'
使用Client.upload_file(如下所示)将本地python模块发送给工作人员时,问题已解决。
client.upload_file('tasks.py') ## Send local package to workers
results = client.get(dsk, 'root') ## get the results
答案 2 :(得分:0)
[仅Linux ]
如果您使用的是Python 3.XX,则可能需要安装pip版本3,然后使用下面的命令
sudo pip3 install dask
这很好地安装了所有依赖项以及dask