问题描述
当尝试在工作程序中加载用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 (将#修改为@)