Использование 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
возвращает возвращаемое значение, возвращаемое функцией.
Использование 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
multiprocessing.pool.Pool.apply_async
возвращает AsyncResult
объект, и AsyncResult.get
вернет возвращаемое значение функции, когда он закончить и результат прибыть.
Использование concurrent.futures работает нормально, но не при использовании multiprocessing.pool. Это дает ошибку, которая говорит AssertionError: демоническим процессам не разрешается иметь детей при использовании последнего метода. – TheStupidOne
@ TheStupidOne, Он отлично работает для меня. Не могли бы вы показать полную трассировку? – falsetru