Рубрика «asyncio»

В FastAPI можно объявить обработчик как async def, а можно как обычный def. Многие ставят async везде «потому что так быстрее» и спокойно вызывают внутри requests.get() или синхронный драйвер БД. Сервис при этом работает, тесты проходят, а на первой же реальной нагрузке всё встаёт колом, причём вместе с health‑check'ом.

В статье разберу, что на самом деле происходит с каждым вариантом, покажу замеры и дам короткую шпаргалку, какой вариант выбирать.

Как FastAPI выполняет обработчики

Правило одно, но из него следует всё остальное.

Я автор aiochlite — асинхронного клиента ClickHouse на aiohttp. Клиент читает результаты запросов в бинарном формате RowBinaryWithNamesAndTypes. Сам RowBinary-декодер написан на Python без собственного модуля расширения; единственная обязательная зависимость библиотеки — aiohttp.

В таком декодере каждое числовое поле читалось отдельным вызовом. Функция, выбранная по типу колонки, звала метод reader, тот — struct.unpack_fromЧитать полностью »

Всем привет!

Меня зовут Тарас, я автор библиотеки picows — ультрабыстрых вебсокетов для asyncio. В этой статье я расскажу, почему вообще появилась ещё одна библиотека для веб-сокетов, покажу результаты бенчмарков и заодно порассуждаю о производительности в asyncio.

Предыстория

Читать полностью »

Но очень быстро оказывается, что настоящая сложность не в самих задачах, а в инфраструктуре вокруг них.

Сначала хочется просто запускать код в фоне. Потом появляются ретраи, таймауты, логирование, контроль выполнения. Ещё чуть позже всплывают совсем неприятные вопросы: что делать с пропущенными запусками после рестарта, как не дублировать задачи и где вообще должна жить логика планирования.

В какой-то момент становится очевидно:

ты уже пишешь не задачи, а pipeline вокруг задач

Именно в этот момент мне перестало хватать привычных инструментов.

Привет! Меня зовут Никита Соболев, я core-разработчик языка программирования CPython, а так же core-разработчик фреймворка Litestar, пакета django-stubs и множества других пакетов для Django.

Сегодня я расскажу, как мы сделали самый быстрый и самый семантически корректный фреймворк для создания апишек на Джанго. Поговорим про конкурентов, покажу очень крутые интеграции, поделюсь своей философией и правилами, которые использовались для создания фреймоврка, ну накину на вентилятор для интереса.

Читать полностью »

При работе с Python да и другими языками программирования часто возникает необходимость ускорения выполнения кода, масштабирования обработки данных или работы с большим количеством сетевых запросов. Именно в Python для решения этих задач существуют три базовых метода. Это: threading, multiprocessing и asyncio. На первый взгляд – механизмы схожие. Но при детальном разборе ясно, что они решают принципиально разные задачи, опираются на разные модели исполнения и обладают своими ограничениями. В статье расскажу об особенностях каждого метода – будет интересно и познавательно.

Конкурентность и параллелизм в Python

Читать полностью »

У каждого человека есть желания, которые он не сообщает другим, и желания, в которых он не сознается даже себе самому.

Я вообще-то — врач

Я программировать и не собирался, но так уж вышло, что на всю группу одному мне оказалось доступно тайное знание: обход white‑lists при помощи того, чьё имя из трёх букв нам сегодня называть нельзя. Так что я быстро начал карьеру «Дяди Васи Компьютерщика» с объявления у подъездной двери и радостно ходил по гостям настраивать соответствующие «транспортные протоколы».

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js