在dask进程中使用imp.load_source模块时出错

问题描述

当尝试在工作程序中加载用imp.load_source加载的文件时,我遇到了一些问题,当导入模块并且工作程序无法找到重命名的模块时,使用唯一名称。我的代码太复杂了,因为它是pysd的延迟版本,在使用dask.compute(delayedobject,scheduler='threads')时此版本可以正常运行,但是由于仅使用120%的CPU而速度太慢,并且dask使程序比原始程序慢得多,所以我想尝试scheduler='processes'。 这是我现在正在做的简化版本:

run.py 加载模型并将其转换为Model对象:

from pysd import Model
from dask.distributed import Client

if __name__ == '__main__':
    client = Client()
    model = Model('model.py')
    out = model.run()

然后pysd库具有计算演化所需的所有功能,这些功能已经被dask适当地延迟了。 在 pysd 中,使用imp.load_source导入 model.py ,如下所示:

class Model: 
    def __init__(self,py_model_file,...):
        ...
        module_name = os.path.splitext(py_model_file)[0] + str(random.randint(0,1000000))
        self.components = imp.load_source(module_name,py_model_file)
        ...
    def run(self):
        BUILD DELAYED OBJECTS GRAPH + COMPUTE RESULTS

model.py 还使用了 pysd 文件中的某些功能。

但是,当脚本使用dask.computeclient.compute时出现此错误:

  File "/usr/lib/python3.8/site-packages/dask/base.py",line 447,in compute
    results = schedule(dsk,keys,**kwargs)
  File "/usr/lib/python3.8/site-packages/dask/multiprocessing.py",line 208,in get
    result = get_async(
  File "/usr/lib/python3.8/site-packages/dask/local.py",line 486,in get_async
    raise_exception(exc,tb)
  File "/usr/lib/python3.8/site-packages/dask/local.py",line 316,in reraise
    raise exc
  File "/usr/lib/python3.8/site-packages/dask/local.py",line 221,in execute_task
    task,data = loads(task_info)
ModuleNotFoundError: No module named 'model343614'

我在我的PYTHONPATH中添加了 pysd 文件夹,我也尝试将 model.py 文件夹添加到PYTHONPATH,并在 run.py 中使用client.upload_file,并将客户端作为参数传递给Model,并在中进行操作 pysd 脚本,但是没有运气。

谢谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...