dask无法识别我的服务模块

问题描述 投票:0回答:1

我有一个服务,其中有几个模块,并且在主文件中,我将像下面那样导入大多数模块。

from base_client import BaseClient
import request_dispatcher as rd
import utils as util

在主要功能之一中,我打电话给dask客户提交。当我尝试从将来的对象中获取结果时,它给了我modulenotfound错误,如下所示

**** ModuleNotFoundError:没有名为'base_client'****的模块

这是我定义客户端并调用函数的方式

def mytask(url, dest):
   .....

client = Client(<scheduler ip>)
f_obj = client.submit(mytask, data_url, destination)

我如何才能使计划程序和工作人员可以使用这些模块?

dask dask-distributed
1个回答
0
投票

[当您执行submit时,Dask将完成任务并将其发送给工作人员。作为此软件包的一部分,任务所需的任何变量也将被序列化并发送。对于内联定义的功能,这包括整个功能,但是对于模块中的功能,仅是模块和功能名称。这是在相同的CPU和带宽下完成的(想象一下要发送恰好已导入的所有模块的所有源)。在工作方,任务已解包,对于函数,这意味着导入模块import base_client。这遵循在sys.path定义的位置中查找的常规python逻辑。如果没有定义模块的文件,则会出现上述错误。

要解决,请将文件复制到工作人员可以看到的地方。您可以使用upload_file临时(使用临时目录)来执行此操作,但是最好使用通常的pipconda方法安装模块。即使使用本地群集,也无法从“当前目录”导入。

要获取更多信息,您需要发布一个完整的示例来说明问题。实际上,使用从模块导入的功能始终与submit一起使用,没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.