Функция asyncio.wait() это еще один способ вызвать множество асинхронных задач.
Она работает в нескольких режимах.
1. Самый простой - ждем завершения всех задач
async def main():
tasks = [asyncio.create_task(do_it(i)) for i in range(10)]
done, pending = await asyncio.wait(
tasks,
return_when=asyncio.ALL_COMPLETED
)
for task in done:
try:
print(task.result())
except Exception as e:
print(e)
Очень похоже на gather, но работает не так.
▫️возвращает не результаты, а два сета с объектами Task у которых можно забрать результат через task.result() если они в списке done
▫️не гарантирует порядок результатов так как оба объекта это set
▫️не выбрасывает исключение когда оно появляется, а сохраняет его в Task. Исключение появится когда попробуете забрать резултьтат.
2. Ждем завершения первой задачи, даже если там ошибка.
async def main():
tasks = [asyncio.create_task(do_it(i)) for i in range(3)]
done, pending = await asyncio.wait(
tasks,
return_when=asyncio.FIRST_COMPLETED
)
# в done может быть несколько задач!
for task in done:
try:
print(task.result())
except Exception as e:
print(f"Fail: {e}")
# Оставшиеся задачи в pending, как правило, нужно отменить, иначе они будут продолжать работать
for task in pending:
task.cancel()
В сете done будут таски которые успели завершится, причем как успешно так и нет.
3. До первой ошибки.
Тоже самое, но с аргументом FIRST_EXCEPTION
done, pending = await asyncio.wait(
tasks,
return_when=asyncio.FIRST_EXCEPTION
)
Функция завершается как только первая задача упадет с ошибкой.
Учтите, что в любом случае done вы можете обранужить несколько задач, как с ошибками так и успешные.
↗️ Полный листинг примеров здесь
#async
🥇💣LE BOMBE DELLA GIORNATA
Ecco le migliori offerte ancora attive
🔥-74%‼️ Non ti scordar di me. #Ops (Libro 2) - di Elisa Maino
💰4,39€ invece di 16,90€
👉https://amzn.to/3HtJirN
🔥-62%‼️ Con Dio non sei mai solo - di Benedetto XVI (Joseph Ratzinger)
💰5,68€ invece di 15,00€
👉https://amzn.to/3JSnt5G
🔥-42%‼️ Gamma Draconis - di Benoist Simmat, Eldo Yoshimizu
💰9,92€ invece di 17,00€
👉https://amzn.to/3JEGqZD
Ad & Info
🥇💣LE BOMBE DELLA GIORNATA
Ecco le migliori offerte ancora attive
🔥-81%‼️ La mia casa - di Raf
💰3,53€ invece di 18,50€
👉https://amzn.to/3E24ByP
🔥-78%‼️ Non ti scordar di me. #Ops (Libro 2) - di Elisa Maino
💰3,72€ invece di 16,90€
👉https://amzn.to/4kgSIVq
🔥-46%‼️ Atlante di diritto pubblico comparato - di Ferrari franco
💰14,57€ invece di 27,00€
👉https://amzn.to/4jmfgTt
🔥-44%‼️ Melvill - di Rodrigo Fresán
💰11,22€ invece di 20,00€
👉https://amzn.to/4jsFPGN
🔥-41%‼️ Doll bones. La bambola di ossa - di Holly Black
💰6,17€ invece di 10,50€
👉https://amzn.to/4kdm0nT
🔥-37%‼️ Collezione Londra. Con adesivi. Ediz. a colori - di
💰5,99€ invece di 9,50€
👉https://amzn.to/4dCOeG4
Ad & Info
❌❌ERRORE O AFFARE?💣😱
#AdolescentiERagazzi
📚Non ti scordar di me. #Ops (Libro 2) - di Elisa Maino
💰A soli 4,39€ invece di 16,90€
👉https://amzn.to/3HtJirN
In un mondo di scelte decisive e passioni inconfondibili, la protagonista scopre che ogni segreto può cambiare il destino. Scopri il suo percorso.
#Ad & Info
❌❌ERRORE O AFFARE?💣😱
#AdolescentiERagazzi
📚Non ti scordar di me. #Ops (Libro 2) - di Elisa Maino
‼️ Minimo Storico ‼️
💰A soli 3,72€ invece di 16,90€
👉https://amzn.to/4kgSIVq
Tra scelte cruciali e passioni travolgenti, la protagonista affronta un mondo che cambia. Scopri come ogni decisione può cambiare tutto.
#Ad & Info