Отдельно разберём 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
«Рыцарский альбом» (из серии «Средневековые войны»), 80х80см, холст, масло, Doping Pong, 2023
Это вторая работа из серии, посвящённой эстетике и философии средневекового милитаризма, получившего новые смыслы и роль на международной арене во втором десятилетии XXI века.
Зачастую политологи и социологи именуют наше время «Новым Средневековьем». Картина «Рыцарский альбом» отображает главенствующий ныне девиз, знакомый геймерам по игровому режиму «Все против всех, или Каждый сам за себя».
На архаичные воинские доспехи нанесены современные сочные камуфляжные паттерны, которые отсылают к разным природно-климатическим зонам, временам года и сторонам света: здесь есть и заснеженные горные ледники, и ослепительно солнечная пустыня, и непроходимая лесная чаща, и выжженная огнём извержений земля.
Картина композиционно и стилистически решена как обложка винилового альбома вымышленной хевиметалл рок-группы, участники которой не показывают публике своих лиц.
Сюжет картины может иметь множество толкований и визуализирован на стыке средневекового футуризма и неопоп-арта.
More info: Лот 21 - https://vladey.net/ru/lot/12312
#dopingpong#contemporaryart#modernpainting#middleages#knights#medievalwars
Adultery in the later Middle Ages was punished by religious penance, fines, corporal punishment, and public humiliation. In southern France, a punishment called “the run” forced an adulterous couple to move through the streets. They were often naked or in undergarments. In some cases, the woman held a rope attached to her lover’s genitals. A town crier announced the sentence to gather a crowd. The couple could be beaten at crossroads during the procession. Over time, towns increasingly allowed fines instead of public humiliation, especially for those who could pay, while poorer people were more often sentenced to “the run.”
⚖️🏃♂️📜
[Read more]
@googlefactss
#MiddleAges#HistoryFacts#MedievalLaw#Adultery#france#punishment