获取python中多处理函数的返回值

The*_*One 6 python python-multithreading python-multiprocessing

我有两个并行运行的函数,每个函数都返回一个值.我需要等待两个函数完成,然后处理它们的返回.我怎么能在python中实现这一点.假设

def fun1():
   #do some calculation#
   return val1

def fun2():
   #do some calculation#
   return val2
Run Code Online (Sandbox Code Playgroud)

我想fun1和fun2并行运行然后需要计算

valsum = val1+val2
Run Code Online (Sandbox Code Playgroud)

fal*_*tru 7

使用concurrent.futures:

from concurrent.futures import ProcessPoolExecutor as Executor
#from concurrent.futures import ThreadPoolExecutor as Executor  # to use threads
with Executor() as executor:
    future1 = executor.submit(fun1, arg1, arg2, ...)
    future2 = executor.submit(fun2, arg1, arg2, ...)
    val1, val2 = future1.result(), future2.result()
    valsum = val1 + val2
Run Code Online (Sandbox Code Playgroud)

concurrent.futures.Executor.submit调度要执行的函数,并返回一个concurrent.futures.Future对象.

concurrent.futures.Future.result返回函数返回的返回值.


使用multiprocessing.pool:

from multiprocessing.pool import Pool
#from multiprocessing.pool import ThreadPool as Pool  # to use threads
with multiprocessing.pool.Pool() as pool:
    result1 = pool.apply_async(fun1, (arg1, arg2, ...))
    result2 = pool.apply_async(fun2, (arg1, arg2, ...))
    val1, val2 = result1.get(), result2.get()
    valsum = val1 + val2
Run Code Online (Sandbox Code Playgroud)

multiprocessing.pool.Pool.apply_async返回一个AsyncResult对象, AsyncResult.get一旦完成并返回结果,它将返回该函数的返回值.

  • 我在很多地方看到的最干净的答案大多数示例都与 .map() 一起使用,但这不是唯一的解决方案。 (2认同)