Отдельно разберём 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
XVI
Зазеркалье 🕳
По эту сторону - бетон и сталь.
По ту - лишь тихий ответ воды.
📎 272
📆 09_2025
🗺 г.Гусев, Калининградская область
📷 Olympus OM-1/ Seikanon MC 28/2.8
🎞 Kodak Double-X 5222
🧪 D-76 1+1, 20°C - 10 мин
📌 iso 250
P.S. Это удивительное место мне показала Оля @petrO_design
#olympusom1
#kodak
#kodakdoublex
Хоста 🌿
Влюбилась в эти листья.
Вечером, собираясь домой, я увидела их, подсвеченными лучами уходящего солнца, — и не смогла пройти мимо.
📎 267
📆 08_2025
🗺 п. Светлое, Калининградская область
📷 Olympus OM-1/ Seikanon MC 28/2.8
🎞 Kodak Double-X 5222
🧪 D-76 1+1, 19°C - 11.15 мин
📌 iso 250
#olympusom1
#kodak
#kodakdoublex
🕷
Во всем есть свой порядок и своя структура. Даже в беспорядке.
📎 198
📷 Зенит 11 / Гелиос 44М 2/58
🎞 Kodak Double-X 5222
📆 09_2024
🧪 Пародинал 1+50, 21°С - 8 мин
📌 iso 250
#zenit11
#kodak
#kodakdoublex