@Andrew_Novikov

Как получить результат выполнения задачи в Asyncio?

У меня есть 16 датафреймов. Я создал функцию, которая берет два необходимых мне датафрейма и после всех операций, возвращает мне в результате один датафрейм с итоговыми данными. Это занимает много времени, и я захотел это ускорить с помощью Asyncio. Переписал функцию в сопрограмму и задал 8 задач.

tay = asyncio.create_task(probability_pokaz(df1,df2))
tt = asyncio.create_task(probability_pokaz(df3,df4))
ps = asyncio.create_task(probability_pokaz(df5,df6))
p = asyncio.create_task(probability_pokaz(df7,df8))
c = asyncio.create_task(probability_pokaz(df9,df10))
zoau = asyncio.create_task(probability_pokaz(df11,df12))
zotd = asyncio.create_task(probability_pokaz(df13,df14))
zops = asyncio.create_task(probability_pokaz(df15,df16))

await tay
await tt
await ps
await p
await c
await zoau
await zotd
await zops


Для дальнейших вычислений нужно дождаться все 8 новых датафреймов.

Вопрос. Как мне получить доступ к результату выполнения этих задач? Т.е. датафрейму полученному из сопрограммы, ведь переменные tay, tt и т.д. это все объекты типа задач, а не самого датафрейма.
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
await tay
Угадай с трёх раз, что возвращает это выражение?
Правильно. Значение, которое вернёт корутина, запущенная в рамках задачи. Просто присвой его переменной.
А вообще в твоём случае и задачи-то не требуются.
Освой asyncio.gather().
Она позволит выполнить переданные корутины одновременно, и вернёт массив их результатов.
results = await asyncio.gather(coro1(x,y), coro2(a,b), ...)
res1, res2, ... = results
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
MAKAPOH
@MAKAPOH
многостаночник
Можно в каждую функцию передать объект очереди через которую они вернут свой результат.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы