Функция 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
🗽 Los jugadores de los Yankees quieren usar uniformes alternativos en partidos de visitante. ¿Deberían los Yankees comenzar a usar jerseys alternativos por primera vez en la historia de la franquicia?
#Yankees
🗞 | t.me/MLB_Daily
🗽 La camiseta de práctica de bateo azul marino de los Yankees ha sido aprobada por la MLB para ser usada en partidos, ya que forma parte de su conjunto de uniformes oficiales. Aún está por determinar si realmente la usarán en un partido.
#Yankees
🗞 | t.me/MLB_Daily
🧢🗽 Una mirada a la nueva rotación proyectada para los Yankees en el Día de Apertura después de que, según se informa, adquirieran a Ryan Weathers de los Marlins.
📊 Proyecciones a través de FanGraphs
#️⃣#Yankees
🗞 | t.me/MLB_Daily
📊 Los dos mejores jugadores de posición y los dos mejores lanzadores por fWAR esta temporada son TODOS de los New York Yankees 🤯
#Stats#Yankees
🗞 | t.me/MLB_Daily
💥 Lourdes Gurriel Jr será el primer cubano en ver acción en el #OpeningDay.
👉 Enfrentará a los #Yankees y partirá en el 6to turno y LF.
@CirculodeEspera
🏴☠️🗽 Paul Skenes quiere jugar para los Yankees, le dijo uno de sus compañeros de los Pirates a @randarino. Según se informa, Skenes no tiene confianza en que los Pirates alguna vez ganen, y quiere ser cambiado mucho antes de que comience su agencia libre después de la temporada 2029.
🗞 Vía Tal'kin Baseball
#️⃣#Skenes#Yankees
🗞 | t.me/MLB_Daily
🗽🗽 Aaron Judge continúa grabando su nombre en la historia de los Yankees empatando a Derek Jeter, Robinson Canó, Jorge Posada y a Dave Winfield como los máximos ganadores de Bates de plata en la historia de la franquicia.
#️⃣#Yankees#Judge
🗞 | t.me/MLB_Daily
🗽🩸 Aroldis Chapman dice que se sintió irrespetado por los Yankees y que se retiraría antes de volver a jugar para ellos.
#️⃣#Yankees#Chapman
🗞 | t.me/MLB_Daily
🗽🗽 Los Yankees y Cody Bellinger llegaron a un acuerdo por cinco años y $162.5 millones, según fuentes de ESPN. Hay cláusulas de rescisión después de la segunda y tercera temporada, un bono de firma de $20 millones y una cláusula de no intercambio completa.
#️⃣#Yankees#Bellinger
🗞 | t.me/MLB_Daily
❌🗽 Según Jorge Castillo, se espera que Cody Bellinger opte por no continuar con su contrato con los Yankees y se convierta en agente libre.
#️⃣#Yankees#Bellinger
🗞 | t.me/MLB_Daily