繁体   English   中英

多重处理:在导入的函数中使用池

[英]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内部,而运行所有内容的脚本又是分开的。

跑步时没有例外,但是有两个问题:

  1. res.successful()返回False
  2. 它的运行比没有多处理的运行快。

我怀疑我的体系结构使事情复杂化,但是,并行化功能在单独的模块中很重要。

有什么建议么?

该代码multi_watershed直接将函数和参数传递给apply_asyncmulti_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM