[英]multiprocessing: using pool inside imported function
我正在尝试创建一个脚本,在该脚本中它从单独的模块调用函数以进行并行处理。
我的“顶级”脚本如下所示:
from hydrology import model, descriptors
if __name__ == "__main__":
datafile = r"C:\folder\datafile.shp"
myModel = model.Model(data = datafile)
res = descriptors.watershed_pll(myModel)
descriptors
模块如下所示:
from multiprocessing import Pool
from arcfunc import multi_watershed
def watershed_pll(model):
pool = Pool()
for key, val in model.stations.iteritems():
res = pool.apply_async(multi_watershed(val, key))
pool.close()
pool.join()
return res
如您所见,要并行运行的函数是从模块arcfunc
导入的,执行并行化的函数在模块descriptors
内部,而运行所有内容的脚本又是分开的。
跑步时没有例外,但是有两个问题:
我怀疑我的体系结构使事情复杂化,但是,并行化功能在单独的模块中很重要。
有什么建议么?
该代码multi_watershed
直接将函数和参数传递给apply_async
, multi_watershed
直接(在主进程中)调用multi_watershed
,并传递了该函数的返回值。
传递函数和参数。
替换以下行:
res = pool.apply_async(multi_watershed(val, key))
与:
res = pool.apply_async(multi_watershed, (val, key))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.