Отдельно разберём 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
Il centrodestra vince le elezioni suppletive in #Veneto, i leghisti Giulio #Centenaro e Alberto #DiRubba subentrano a Massimo Bitonci e Alberto Stefani.
Collegio di Selvazzano Dentro:
🔵 Centenaro (CDX): 59,44%
🟠 Stivanello (CSX): 31,21%
⚫ Adinolfi (PdF): 5,03%
🟡 Paccagnella (ORA!): 4,32%
Collegio di Rovigo:
🔵 Di Rubba (CDX): 57,43%
🟠 Bovolenta (CSX): 34,91%
⚪ Padoan (Ind.): 7,67%
@UltimoraPolitics24
#Italia#Suppletive
Camera dei Deputati, collegio di Selvazzano Dentro - 50 sezioni scrutinate su 353
🔵 Giulio #Centenaro (CDX): 64,28%
🟠 Antonino #Stivanello (CSX): 26,31%
🟤 Mario Adinolfi (#PdF): 5,30%
🟡 Andrea #Paccagnella (ORA!): 4,11%
@Osservatorioitaliano
#Italia#Suppletive
✅ Giulio #Centenaro (#Lega|PfE) e Alberto #DiRubba (Lega) sono eletti deputati rispettivamente al posto dell’ex sottosegretario e attuale Assessore all’Industria Massimo #Bitonci e del Presidente della Regione Veneto, Alberto #Stefani.
@OsservatorioItaliano