首页 > 解决方案 > 当第二个函数使用第一个函数中贴花的值时,如何在函数中进行多处理?

问题描述

我有几个函数,当每个其他函数使用前一个函数的输出时,我想使用多处理并行运行它们。

我尝试使用 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

标签: pythonfunctionpython-multiprocessing

解决方案


如果func2依赖于 的输出func1,则不能以相同的方式并行运行它们i。但是您可以同时并行运行它们

def worker(i):
   intermediate = func1(i)
   return func2(i, intermediate)


p = multiprocessing.Pool():
p.map(worker, range(3)

推荐阅读