всем привет, я тимлид бэкенда, ищу к себе в команду питониста, мидл плюс или сеньор. делаем маркетплейс, щас распиливаем старый монолит на джанге на сервисы и хотим успеть до нового года, в пике около 3к рпс. стек питон, фастапи, постгрес, кафка, редис, кликхаус, всё крутится в кубере. нужен опыт на питоне от 5 лет и чтоб с асинком, кафкой и постгресом под нагрузкой работал реально а не по туториалам. вилка от 550 до 750к на руки, зависит от собеса, оформление через ип или самозанятость, если не в рф можно в валюте или крипте. удалёнка полностью, созвонов по минимуму, один созвон со мной минут на сорок и если всё норм сразу оффер. название пока не светим, скажу ближе к офферу. если интересно пиши в лс сколько лет на питоне и где работал, гитхаб кинь если есть. если гитхаба или портфолио нет то дам маленькое тестовое
Д V Ю V
Ю
Ю V
V Дело не в TaskGroup, а в том, вызываешь ли ты await task после task.cancel(). На черном скрине... Что происходит: 1. Создаётся задача background(). 2. Через 5 секунд вызывается task.cancel(). 3. Выполняется return 42. 4. Python начинает выходить из async with TaskGroup. 5. TaskGroup дожидается завершения задачи. 6. Задача завершается с CancelledError. 7. TaskGroup считает отмену дочерней задачи нормальным завершением и не пробрасывает CancelledError наружу. На белом скрине всё иначе.... речь про эти строки task.cancel() await task task.cancel() запрашивает отмену задачи. При следующем подходящем моменте выполнения в отменяемую корутину будет выброшено исключение asyncio.CancelledError. так и вот главное... Если ты явно делаешь await task для отменённой задачи, CancelledError будет выброшен уже в твоей текущей корутине.❤2
Ну и для общей осведомлённости
TaskGroup специально спроектирован таким образом, чтобы отмена отдельной дочерней задачи не считалась ошибкой всей группы.
Ещё интересное то что asyncio.CancelledError наследуется непосредственно от BaseException, а не от Exception.
по этому такой код не перехватит CancelledError
try:
task.cancel()
await task
except Exception:
pass
❤2