python - 当第二个函数使用第一个函数中贴花的值时,如何在函数中进行多处理?
问题描述
我有几个函数,当每个其他函数使用前一个函数的输出时,我想使用多处理并行运行它们。
我尝试使用 multiprocessing.Pool() 为每个函数调用 pool.map() 。它交替运行函数,首先是给定范围内的 func1(i),完成后,它移动到 func2(i)。但是对于给定的 i,我需要同时运行 func1(i) 和 func2(i),然后继续执行下一个 i。
注意:我的实际函数需要几个小时才能运行,所以我需要使用并行处理,这段代码只是一个虚构的例子
import multiprocessing
core_num = multiprocessing.cpu_count()
def func1(i):
global a # declaring it globaly to us later in func2()
a = i**2
print("i={}\na={}\n".format(i,a))
return a
def func2(i):
global b # decalering it glabally to use it in next functions
b = a*i
print("i={}\nb={}\na={}\n".format(i,b,a))
return b
if __name__ == "__main__":
pool = multiprocessing.Pool(processes=core_num)
pool.map(func1, range(3))
pool.map(func2,range(3))
输出是
i=0
a=0
i=1
a=1
i=2
a=4
i=0
b=0
a=4
i=1
b=4
a=4
i=2
b=8
a=4
我希望它是
i=0
a=0
i=0
b=0
a=0
i=1
a=1
i=1
b=1
a=1
i=2
a=4
i=2
b=8
a=4
解决方案
如果func2
依赖于 的输出func1
,则不能以相同的方式并行运行它们i
。但是您可以同时并行运行它们。
def worker(i):
intermediate = func1(i)
return func2(i, intermediate)
p = multiprocessing.Pool():
p.map(worker, range(3)
推荐阅读
- angular - 如何在表单数组内的自动完成中添加服务中的数据?
- php - 如何验证该值是否已存在。PHP
- php - 使用 ZendServer 连接到外部 DB2
- python - 如何向networkx散景图添加分类图例
- python -
- python - Python - 单个 for 循环,计算以下 to_analyze 中每行的最大、最小和平均字数
- html - 文字太小而无法阅读(移动设计)
- xamarin.forms - Xamarin 表单:点击和双击
- mysql - sqoop如何在增量导入中导入固定数量的行?
- php - Bootstrap 无法在 Laravel Blade 中正确显示