Отдельно разберём TaskGroup, который пришел на замену gather в Python 3.11.
Ключевые отличия
▫️create_task() возвращает объект asyncio.Task, у которого есть соответствюущие методы управления. То есть у нас больше контроля
▫️это контекстный менеджер, который гарантирует что все таски будут остановлены по выходу из контекста
▫️ошибка автоматически отменяет незавершенные задачи,
▫️except* передает нам ExceptionGroup, в котором каждую ошибку можно обработать отдельно
import asyncio
import random
async def do_it() -> str:
if random.random() < 0.1:
raise ValueError('Oops')
delay = random.uniform(0.5, 1.5)
await asyncio.sleep(delay)
return delay
async def main():
try:
async with asyncio.TaskGroup() as tg:
for _ in range(10):
tasks.append(tg.create_task(do_it()))
for t in tasks:
print(t.result())
except *ValueError as e:
for err in e.exceptions:
print(err)
asyncio.run(main())
Рекомендую изучить страницу Coroutines and Tasks из документации, где представлено больше интересных примеров и механизмов
- таймауты
- отмена задач
- создание задач из другого потока
#async
Taehyung from his trainer’s Instagram!
👤V~!
Please don’t be so good at even exercising ㅜㅜㅎㅎ
you’re too cool, bro!
https://www.instagram.com/p/DMu7RRMyOBC/?igsh=cGh4Z2FxN3RseWE2
#INSTAGRAM
•@OUR_7_PRINCES•
Taehyung went to Japan on 29th June for work, that's why the photos of Taehyung going to Japan were not leaked, but yesterday the photos of Taehyung returning from Japan on 1st July were leaked and today the photos of Taehyung going to Japan were given by reporters...
#instagram
@OUR_7_PRINCES