Запуск нескольких асинхронных функций и получение возвращаемого значения каждой функции
Я пытался создать функцию, которая может запускать несколько процессов асинхронно и отправит ответ. посколькуmultiprocessing.Process()
не возвращайте ответ, я думал о создании функции как:
from multiprocessing import Process
def async_call(func_list):
"""
Runs the list of function asynchronously.
:param func_list: Expects list of lists to be of format
[[func1, args1, kwargs1], [func2, args2, kwargs2], ...]
:return: List of output of the functions
[output1, output2, ...]
"""
response_list = []
def worker(function, f_args, f_kwargs, response_list):
"""
Runs the function and appends the output to list
"""
response = function(*f_args, **f_kwargs)
response_list.append(response)
processes = [Process(target=worker, args=(func, args, kwargs, response_list)) \
for func, args, kwargs in func_list]
for process in processes:
process.start()
for process in processes:
process.join()
return response_list
В рамках этой функции я называюworker
асинхронно, который принимает дополнительный параметр какlist
, Поскольку списки передаются как ссылки, я подумал, что могу добавить ответ фактической функции в список. А такжеasync_call
вернет мне ответ всей функции.
Но это не так, как я ожидал. Значение добавляется кlist
в пределахworker()
, но вне рабочегоresponse_list
список остается пустым.
Есть идеи, что я делаю не так? И есть ли альтернатива для достижения того, что я делаю?