我有两个需要并行运行的函数,每个函数都会返回一个值。我需要等待这两个函数都完成后,再处理它们的返回值。在Python中,我应该如何实现?假设
def fun1():
#do some calculation#
return val1
def fun2():
#do some calculation#
return val2
我希望fun1和fun2能够并行运行,并且需要计算它们的结果。
valsum = val1+val2
我有两个需要并行运行的函数,每个函数都会返回一个值。我需要等待这两个函数都完成后,再处理它们的返回值。在Python中,我应该如何实现?假设
def fun1():
#do some calculation#
return val1
def fun2():
#do some calculation#
return val2
valsum = val1+val2
使用 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
concurrent.futures.Executor.submit
函数安排要执行的函数,并返回一个concurrent.futures.Future
对象。
concurrent.futures.Future.result
函数返回被执行函数的返回值。
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
multiprocessing.pool.Pool.apply_async
返回一个 AsyncResult
对象,AsyncResult.get
会在函数执行完毕并返回结果后返回函数的返回值。
import concurrent.futures
def download_video(data):
# print(data)
return data
with concurrent.futures.ProcessPoolExecutor() as executor:
futures = [executor.submit(download_video, x, ) for x in your_list]
results = [result.result() for result in futures]