CancelledError — не просто очередная ошибка. Разбираемся, как устроена отмена задач в asyncio

Это первая из двух статей о CancelledError — сигнале отмены задачи. В ней мы остановимся на стандартном asyncio. Узнаем, что на самом деле представляет собой CancelledError , с точки зрения event‑loop. Разберёмся, как работает счётчик отмены ( cancel/uncancel ), на котором построены TaskGroup и asyncio.timeout . Наконец, обсудим проблемы, которые возникают на практике, в первую очередь связанные с asyncio.shield .

https://habr.com/ru/companies/tochka/articles/1048468/

#python #asyncio #concurrency #бэкенд #web

CancelledError — не просто очередная ошибка. Разбираемся, как устроена отмена задач в asyncio

При работе с асинхронным кодом нам часто приходится обрабатывать CancelledError — сигнал отмены задачи. С точки зрения приложения это выглядит как обычное исключение — достаточно добавить try/except...

Хабр

Погружение в многозадачность Python: процессы, потоки, GIL и асинхронность

Многозадачность кажется простой темой, пока дело не доходит до Python и GIL. В статье разбирается: чем процесс отличается от программы, зачем нужны потоки, что такое ядро процессора и в чём разница между конкурентностью и параллелизмом. Затем – специфика Python: как GIL влияет на потоки, когда стоит использовать процессы, асинхронность или корутины, и чем они отличаются от green threads. Материал сопровождается схемами, рабочими примерами кода и реальными замерами производительности для CPU-bound и I/O-bound задач, а в конце – практические выводы о том, что и когда выбирать.

https://habr.com/ru/articles/1048886/

#python #gil #многопоточность #многопроцессность #asyncio #конкурентность #параллелизм #gevent

Погружение в многозадачность Python: процессы, потоки, GIL и асинхронность

Чтобы приступить к объяснению данной темы первоначально необходимо ответить на вопрос: «Что такое процесс, чем он отличается от программы и зачем нужны потоки?» Что такое Программа? Компьютерная...

Хабр

TIL: asyncio.TaskGroup in Python 3.11+ gives you structured concurrency for free. Spin up multiple async tasks together - if one fails, the rest get cancelled automatically, and exceptions surface as a single ExceptionGroup instead of leaving orphaned tasks hanging around.

Cleaner than asyncio.gather() plus manual error juggling, especially when you're fanning out concurrent calls (DB query + external API, etc.) and want sane cancellation behavior.

#Python #asyncio

Почему миллион корутин на Rust весит меньше, чем сто тысяч на Python

Миллион асинхронных задач на Rust спокойно живёт в нескольких сотнях мегабайт. Сто тысяч корутин на Python нередко упираются в память раньше. Дело не в том, что “Rust быстрый, а Python медленный” - дело в том, ГДЕ физически лежит состояние приостановленной задачи. Разбираю, во что превращается ваш async fn после компиляции: стейт-машина на стеке против объекта в куче. Сравниваю модели Rust (Tokio), Python (asyncio), C# и JavaScript - кто аллоцирует на каждый await, а кто нет, и почему это видно на счётчике RAM при 100k задач. Внутри: что генерирует компилятор, куда уезжает состояние между await, stackful против stackless, и что с этим делать сегодня.

https://habr.com/ru/articles/1046862/

#async #await #корутины #Rust #Tokio #asyncio #конкурентность

Почему миллион корутин на Rust весит меньше, чем сто тысяч на Python

TL;DR. async fn компилируется в стейт-машину во всех языках, но кладут её по-разному. Rust генерирует enum фиксированного размера, который живёт на стеке вызывающего и не аллоцируется. CPython...

Хабр

Hey friends! Time again for #ProgrammingIsMagic! Today we'll be putting #asyncio for #Python to the test, making a #GopherProtocol server.

Join me now at https://twitch.tv/srilyk

I've certainly done something like this before but it's been a hot second, so this will be some good #LearningInPublic

srilyk - Twitch

srilyk streams live on Twitch! Check out their videos, sign up to chat, and join their community.

Twitch

Ваши тесты медленные не из-за базы данных. Я измерил

Есть устойчивое поверье: интеграционные тесты медленные, потому что ходят в настоящую базу. «Подними SQLite в памяти», «замокай репозитории», «не гоняй Postgres в CI» — стандартный набор советов. Мокать я не люблю, но крыть упрёк «настоящая база — это медленно» было нечем. Поэтому я сел, спрофилировал и померил: 3316 интеграционных тестов, прогон 30 минут. После трёх правок инфраструктуры — 109 секунд. База оказалась ни при чём, а совет «чисти базу через TRUNCATE, это быстрее DELETE» у меня работал ровно наоборот — обидно вдвойне, потому что эта рекомендация уже лежала в черновике моей следующей статьи.

https://habr.com/ru/articles/1045923/

#pytest #pytestasyncio #интеграционные_тесты #Python #sqlalchemy #postgresql #fixtures #asyncio #cprofile #event_loop

Ваши тесты медленные не из-за базы данных. Я измерил

Дисклеймер. Это не «единственно верный путь», а кейс одного конкретного проекта: бэкенд на Litestar + SQLAlchemy + Postgres + Redis, 3316 тестов, почти все интеграционные, ходят в настоящую БД. Все...

Хабр

It's over! At least for today! But we did learn some very interesting things about #asyncio !

We'll certainly be covering some more asyncio joy in the next few days... I'm a sucker for protocols. Maybe we'll use asyncio to create a #Gopher server, since https://en.wikipedia.org/wiki/Gopher_(protocol) is super trivial.

Then I'll probably go for creating a little chat server or something 🤔

Gopher (protocol) - Wikipedia

Heeeey #Python friends, it's that time again! Join me now for #ProgrammingIsMagic at https://www.twitch.tv/srilyk

Over the last several streams we spent a bunch of time exploring #sockets, #threading, #multiprocessing, #select, and #epoll

Now it's time to *actually* dig into #asyncio, the most popular choice from my polling.

 boosts welcome!

srilyk - Twitch

srilyk streams live on Twitch! Check out their videos, sign up to chat, and join their community.

Twitch

Dead Letter Queue в Kafka на практике

DLQ — это просто топик. Сложное — всё, что вокруг него. Эта статья — про практическую архитектуру обработки событий из Kafka с отправкой данных во внешний REST API. Главная проблема такого сценария — нестабильность внешнего API. Он периодически деградирует по latency или начинает отвечать с ошибками, и это напрямую влияет на пропускную способность всего консьюмера.

https://habr.com/ru/articles/1045324/

#kafka #concurrency #asyncio #semaphore #finite_state_machine #dead_letter_queue #highload #api

Dead Letter Queue в Kafka на практике

DLQ — это просто топик. Сложное — всё, что вокруг него. Эта статья — про практическую архитектуру обработки событий из Kafka с отправкой данных во внешний REST API. Главная проблема такого сценария —...

Хабр

Как я довёл расходы на LLM до нуля: почему на бесплатных тарифах параллелизм — враг

Это продолжение первой статьи про Briefka — там я описывал самого бота и базовую архитектуру каскада LLM-провайдеров. За прошедшие 4 месяца бот органически вырос с 59 до 84 пользователей, и именно на этом масштабе бесплатный каскад начал срываться на платного провайдера. Расскажу, почему так вышло и как я вернул расходы к нулю — с цифрами и кодом. Код ниже — реальные фрагменты из боевого Briefka, слегка сокращённые для читаемости: убраны логирование и сбор статистики.

https://habr.com/ru/articles/1044546/

#llm #ratelimit #asyncio #telegrambot #groq #deepseek #fallback #circuit_breaker

Как я довёл расходы на LLM до нуля: почему на бесплатных тарифах параллелизм — враг

Это продолжение первой статьи про Briefka — там я описывал самого бота и базовую архитектуру каскада LLM-провайдеров. За прошедшие 4 месяца бот органически вырос с 59 до 84 пользователей, и именно на...

Хабр