我正在将我的模拟与多处理.pool,但我无法在池.map这会导致pickle错误,我需要在的目标函数中使用该参数池.map并行化我的代码。在函数sample()中,第四个参数“sim”的类型为“Module”,因此我不能用p.map()传递它,因为它不能被迭代,但我需要parallel()函数中的该参数,它应该用作
model=sim.simulate(modelname, packname, config)
但目前我静态地导入该模块并将parallel()函数作为
^{pr2}$目前我的代码是这样的,有没有办法将函数sample()中的参数'sim'声明为global并在目标函数parallel()中访问它吗。在
def sample(file,model,config,sim,resultDir,deleteDir):
from multiprocessing import Pool
p=Pool()
p.map(parallel,zip(file,model,dirs,resultpath,config))
def parallel(modellists):
packname=[]
packname.append(modellists[0])
modelname=modellists[1]
dirname=modellists[2]
path=modellists[3]
config=modellists[4]
os.chdir(dirname)
model=OpenModelica.Model(modelname, packname, config)
这是因为
pickle
无法序列化模块,因此multiprocessing
无法通过map
传递该模块。但是,如果使用名为multiprocessing
的pathos.multiprocessing
的分叉,它可以工作。这是因为pathos
使用了dill
序列化程序,它可以对模块进行pickle。在它也适用于多个参数,因此它比压缩所有参数更自然一些,并且还具有异步和迭代映射。在
^{pr2}$获取
pathos
此处:https://github.com/uqfoundation相关问题 更多 >
编程相关推荐