Функция 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
A newly created wallet withdrew 139,557 $HYPE worth $5.49M from #Gate. Address: 0xee0a18b394ece1d7be81be15d6cec3ac7707b71c https://x.com/OnchainLens/status/2034936951275757877 Follow @onchainlens for more onchain updates
A newly created wallet withdrew 139,557 $HYPE worth $5.49M from #Gate.
Address: 0xee0a18b394ece1d7be81be15d6cec3ac7707b71c
https://x.com/OnchainLens/status/2034936951275757877
Follow @onchainlens for more onchain updates
After being dormant for 8 months, a whale deposited 2,11,343 $TRUMP worth $847.4K into #Gate, losing $1.28M.
The whale initially withdrew these $TRUMP for $2.13M from #Gate.
The whale also holds 18,787 $SOL ($1.66M), losing $1.62M.
Address - 7HqAk2h4cJZqyKdbzKEqm4JeWBnKMitVrwFMoEgqE93D
https://x.com/OnchainLens/status/2033095024649601045
Follow @onchainlens for more onchain updates
Wallet 0x011 (likely @ambergroup_io) withdrew 3M $SAFE ($6.72M) from #Gate.io at $2.25 for the first time 6 hours ago.
Notably, the $SAFE price has dropped ~36% since it became transferrable on April 23, 2024. Was this a good entry? 🤔
Follow @spotonchain and set alerts for Amber Group now via https://platform.spotonchain.ai/en/entity/80