如何解决在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.compute
或client.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 举报,一经查实,本站将立刻删除。