Dask"没有名为xxxx"错误

时间:2016-10-11 12:49:10

标签: python-3.5 dask

使用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'

的模块

3 个答案:

答案 0 :(得分:1)

编辑:请参阅MRocklin评论以获得更清洁的解决方案

实际上,如果要在dask worker中执行的代码在外部模块中,则必须从dask工作路径中知道它(它没有从客户端序列化到工作者)。

更改我的PYTHONPATH以确保工作人员知道该模块解决了问题。 在dask问题中发布了类似的问题:

https://github.com/dask/distributed/issues/344

答案 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