Вышло крупное обновление для NServer — минималистичного Python-фреймворка, который позволяет легко создавать кастомные DNS-серверы с помощью понятного API.
Что нового:
Главная фишка версии 3.2.0 — полноценная многопоточность. Раньше всё работало в один поток, и если серверу нужно было сделать тяжелый блокирующий запрос (например, сходить в базу данных на 10–100 мс), пропускная способность моментально падала с 10 000 до 25 запросов в секунду.
Теперь архитектура разделена на три пула потоков:
1. Для приёма входящих DNS-запросов.
2. Настраиваемое количество воркеров для обработки логики.
3. Поток для отправки ответов.
По словам автора, с новой архитектурой сервер уверенно держит от 300 до 1200 запросов в секунду даже при наличии тех самых блокирующих задержек в коде. В синтетических TCP-бенчмарках NServer даже обошёл популярный CoreDNS (когда тот используется как балансировщик) и некоторые серверы, написанные на C.
Полный ченжлог: https://nhairs.github.io/nserver/latest/changelog/
@zen_of_python (теперь в VK и Max)
Что нового:
Главная фишка версии 3.2.0 — полноценная многопоточность. Раньше всё работало в один поток, и если серверу нужно было сделать тяжелый блокирующий запрос (например, сходить в базу данных на 10–100 мс), пропускная способность моментально падала с 10 000 до 25 запросов в секунду.
Теперь архитектура разделена на три пула потоков:
1. Для приёма входящих DNS-запросов.
2. Настраиваемое количество воркеров для обработки логики.
3. Поток для отправки ответов.
По словам автора, с новой архитектурой сервер уверенно держит от 300 до 1200 запросов в секунду даже при наличии тех самых блокирующих задержек в коде. В синтетических TCP-бенчмарках NServer даже обошёл популярный CoreDNS (когда тот используется как балансировщик) и некоторые серверы, написанные на C.
Полный ченжлог: https://nhairs.github.io/nserver/latest/changelog/
@zen_of_python (теперь в VK и Max)
👍4
У популярной библиотеки litellm (обертка для работы с разными LLM API) взломали релизы на PyPI. Скомпрометированы версии
Злоумышленники залили заражённые пакеты напрямую в PyPI в обход пайплайнов на GitHub. Внутри лежит вредоносный файл
Что делает этот скрипт:
— собирает ваши SSH-ключи, файлы .env, доступы к AWS, GCP, Azure и конфиги Kubernetes;
— архивирует данные, шифрует их и сливает на сторонний сервер models.litellm.cloud;
— если находит токен Kubernetes, пытается расползтись по кластеру, создать привилегированные поды на всех нодах и прописать бэкдор в автозагрузку системы.
Самое забавное, что обнаружили атаку ребята из FutureSearch из-за глупого бага самих хакеров. Зловред при запуске плодит дочерний Python-процесс, который из-за логики работы .pth файлов снова вызывает зловред. Возникает бесконечная форк-бомба, которая моментально вешает систему намертво, что и привлекло внимание разработчиков.
Если вы ставили или обновляли
@zen_of_python (теперь в VK и Max)
1.82.7 и 1.82.8.Злоумышленники залили заражённые пакеты напрямую в PyPI в обход пайплайнов на GitHub. Внутри лежит вредоносный файл
litellm_init.pth, который автоматически срабатывает при старте абсолютно любого Python-процесса в заражённом окружении.Что делает этот скрипт:
— собирает ваши SSH-ключи, файлы .env, доступы к AWS, GCP, Azure и конфиги Kubernetes;
— архивирует данные, шифрует их и сливает на сторонний сервер models.litellm.cloud;
— если находит токен Kubernetes, пытается расползтись по кластеру, создать привилегированные поды на всех нодах и прописать бэкдор в автозагрузку системы.
Самое забавное, что обнаружили атаку ребята из FutureSearch из-за глупого бага самих хакеров. Зловред при запуске плодит дочерний Python-процесс, который из-за логики работы .pth файлов снова вызывает зловред. Возникает бесконечная форк-бомба, которая моментально вешает систему намертво, что и привлекло внимание разработчиков.
Если вы ставили или обновляли
litellm 24 марта 2026 года или позже, обязательно проверьте версию через pip show litellm и почистите кеши pip или uv. Зараженные релизы уже снесли с PyPI, но они могли остаться локально. Если вредонос успел запуститься на вашей машине или сервере, придется менять абсолютно все ключи, пароли и токены, до которых он мог дотянуться.@zen_of_python (теперь в VK и Max)
😱3❤2👌2
Автокомплит Python в VSCode работает не всегда логично. Например, при вводе
И вот одному разработчику это надоело и он написал своё решение. Внимание, без ИИ. Просто по сути пересортировал по частоте использования. Алгоритм интегрирован через форк LSP для изменения порядка подсказок
Главное преимущество в скорости. Обычный поиск по таблице работает намного быстрее автокомплитов на базе ИИ и совершенно не грузит процессор. Алгоритм может хуже справляться с неизвестным кодом, но для стандартных библиотек как будто маст хэв, минусов не вижу.
Детальный разбор в блоге: https://matan-h.com/better-python-autocomplete
Исходный код проекта: https://github.com/matan-h/pyhash-complete
@zen_of_python (теперь в VK и Max)
os. редактор первой строкой предлагает редкий метод os.abort вместо нужного os.path или os.remove. И вот одному разработчику это надоело и он написал своё решение. Внимание, без ИИ. Просто по сути пересортировал по частоте использования. Алгоритм интегрирован через форк LSP для изменения порядка подсказок
Главное преимущество в скорости. Обычный поиск по таблице работает намного быстрее автокомплитов на базе ИИ и совершенно не грузит процессор. Алгоритм может хуже справляться с неизвестным кодом, но для стандартных библиотек как будто маст хэв, минусов не вижу.
Детальный разбор в блоге: https://matan-h.com/better-python-autocomplete
Исходный код проекта: https://github.com/matan-h/pyhash-complete
@zen_of_python (теперь в VK и Max)
👍7❤2
Forwarded from Django Unleashed Framework
Django получил новый REST-фреймворк: быстрее, строже и без привязки к моделям
Для Django долгое время было два основных пути: DRF с его сериализаторами, привязанными к моделям, и django-ninja, который пытался повторить FastAPI, но в итоге принёс свои ограничения. Ни один из них не давал полной типизации, гибкости в выборе моделей данных и внятной OpenAPI-спеки из коробки.
Новый фреймворк, созданный core-разработчиком CPython, предлагает альтернативу. Его ключевые особенности:
— производительность на уровне FastAPI (всего на 30% медленнее без учёта БД);
— полная типизация, но без навязывания;
— поддержка любых моделей: pydantic, msgspec, dataclasses, TypedDict и даже собственных сериализаторов;
— строгая валидация ответов в dev-режиме — OpenAPI-спека всегда соответствует реальности;
— нативная работа с sync и async;
— стриминг (SSE, JsonLines) на ASGI;
— расширяемые контроллеры-классы, которые наследуют обычные Django View.
Проект уже содержит удобные инструменты для тестирования (polyfactory, schemathesis, tracecov) и позиционируется как AI-first: есть скилы для миграции с django-ninja, llms-full.txt и интеграции с агентами.
Подробности, примеры кода и философия разработки в статье: https://habr.com/ru/articles/1017036/
Для Django долгое время было два основных пути: DRF с его сериализаторами, привязанными к моделям, и django-ninja, который пытался повторить FastAPI, но в итоге принёс свои ограничения. Ни один из них не давал полной типизации, гибкости в выборе моделей данных и внятной OpenAPI-спеки из коробки.
Новый фреймворк, созданный core-разработчиком CPython, предлагает альтернативу. Его ключевые особенности:
— производительность на уровне FastAPI (всего на 30% медленнее без учёта БД);
— полная типизация, но без навязывания;
— поддержка любых моделей: pydantic, msgspec, dataclasses, TypedDict и даже собственных сериализаторов;
— строгая валидация ответов в dev-режиме — OpenAPI-спека всегда соответствует реальности;
— нативная работа с sync и async;
— стриминг (SSE, JsonLines) на ASGI;
— расширяемые контроллеры-классы, которые наследуют обычные Django View.
Проект уже содержит удобные инструменты для тестирования (polyfactory, schemathesis, tracecov) и позиционируется как AI-first: есть скилы для миграции с django-ninja, llms-full.txt и интеграции с агентами.
Подробности, примеры кода и философия разработки в статье: https://habr.com/ru/articles/1017036/
🔥12❤6✍1
Вебхуки в Python: почему обработка прямо в эндпоинте это ловушка
Начинающие разработчики часто пишут обработку вебхуков в лоб: получили запрос -> обновили базу -> отправили письмо -> вернули ответ. На локальной машине всё работает, но в реальности такой подход приводит к таймаутам (внешний сервис ждёт ответа секунды), потере данных (падение во время обработки) и дублям.
В статье делятся практическим опытом перехода от «просто эндпоинта» к надёжной архитектуре с очередью задач. Ключевое решение: FastAPI принимает вебхук, проверяет подпись, кладёт задачу в Redis и мгновенно отвечает. Отдельный воркер забирает задачи из очереди и спокойно выполняет бизнес-логику. Так API не тормозит, задачи не теряются, а при необходимости можно запустить несколько воркеров для горизонтального масштабирования.
Подробнее о реализации: https://habr.com/ru/articles/1016206/
@zen_of_python (теперь в VK и Max)
Начинающие разработчики часто пишут обработку вебхуков в лоб: получили запрос -> обновили базу -> отправили письмо -> вернули ответ. На локальной машине всё работает, но в реальности такой подход приводит к таймаутам (внешний сервис ждёт ответа секунды), потере данных (падение во время обработки) и дублям.
В статье делятся практическим опытом перехода от «просто эндпоинта» к надёжной архитектуре с очередью задач. Ключевое решение: FastAPI принимает вебхук, проверяет подпись, кладёт задачу в Redis и мгновенно отвечает. Отдельный воркер забирает задачи из очереди и спокойно выполняет бизнес-логику. Так API не тормозит, задачи не теряются, а при необходимости можно запустить несколько воркеров для горизонтального масштабирования.
Подробнее о реализации: https://habr.com/ru/articles/1016206/
@zen_of_python (теперь в VK и Max)
👍7
Вышел релиз Niquests 3.18. Это современный HTTP-клиент для Python, разработка которого длится уже три года. Автор создал его как форк классической библиотеки requests, развитие которой практически остановилось.
Главная фишка Niquests в том, что это полная замена старой библиотеки. Вы можете просто написать
Что появилось под капотом за это время:
— поддержка HTTP/2 из коробки и HTTP/3 (QUIC) при поддержке со стороны сервера;
— системное хранилище сертификатов по умолчанию (больше не нужно таскать за собой certifi);
— встроенные асинхронные методы (Async/Await);
— поддержка WebSocket и SSE через единый API;
— кастомные настройки DNS (over HTTPS, TLS, QUIC).
В реальных бенчмарках на тысячу запросов Niquests показывает среднее время в 0,55 секунды, обгоняя aiohttp (1,35 сек) и httpx (2,08 сек). Отличное обновление, если вам нужны современные стандарты протоколов, но нет желания переписывать всю сетевую логику в старых проектах.
Ссылка на репозиторий: https://github.com/jawah/niquests
@zen_of_python (теперь в VK и Max)
Главная фишка Niquests в том, что это полная замена старой библиотеки. Вы можете просто написать
import niquests as requests и ваш старый код, куки, авторизация и зависимости продолжат работать без изменений, но уже на новых технологиях.Что появилось под капотом за это время:
— поддержка HTTP/2 из коробки и HTTP/3 (QUIC) при поддержке со стороны сервера;
— системное хранилище сертификатов по умолчанию (больше не нужно таскать за собой certifi);
— встроенные асинхронные методы (Async/Await);
— поддержка WebSocket и SSE через единый API;
— кастомные настройки DNS (over HTTPS, TLS, QUIC).
В реальных бенчмарках на тысячу запросов Niquests показывает среднее время в 0,55 секунды, обгоняя aiohttp (1,35 сек) и httpx (2,08 сек). Отличное обновление, если вам нужны современные стандарты протоколов, но нет желания переписывать всю сетевую логику в старых проектах.
Ссылка на репозиторий: https://github.com/jawah/niquests
@zen_of_python (теперь в VK и Max)
This media is not supported in your browser
VIEW IN TELEGRAM
👍8❤5👀3👎1🔥1
Учим LLM работать с файлами локально
На Тпрогер вышла пошаговая инструкция о том, как поднять локальную агентную AI‑систему из трёх компонентов:
— LibreChat — удобный UI для общения с LLM
— MCP‑сервер — стандартный доступ к файлам и инструментам
— Langflow — визуальный конструктор для многоступенчатых сценариев (с валидацией и расчётами)
Всё работает в изолированной Docker‑сети. Данные никуда не уходят.
В статье готовые docker-compose.yml, конфиги librechat.yaml, пример кастомного Python‑компонента для расчётов и таблиц, а также схемы работы каждого этапа.
@zen_of_python (теперь в VK и Max)
На Тпрогер вышла пошаговая инструкция о том, как поднять локальную агентную AI‑систему из трёх компонентов:
— LibreChat — удобный UI для общения с LLM
— MCP‑сервер — стандартный доступ к файлам и инструментам
— Langflow — визуальный конструктор для многоступенчатых сценариев (с валидацией и расчётами)
Всё работает в изолированной Docker‑сети. Данные никуда не уходят.
В статье готовые docker-compose.yml, конфиги librechat.yaml, пример кастомного Python‑компонента для расчётов и таблиц, а также схемы работы каждого этапа.
@zen_of_python (теперь в VK и Max)
❤4🔥1
Разработчик запустил первый PyPI-пакет repowise (инструмент для автоматической генерации wiki-документации по кодовой базе) и через несколько дней обнаружил три copycat-пакета, выложенных одновременно с идентичным описанием: «base intelligence ahead — performs every dimension».
Оказалось, это не просто спам-пустышки. Автор-одиночка форкнул его код (лицензия AGPL-3.0), прогнал через LLM для мелких правок, выложил под тремя разными именами без указания источника и без соблюдения условий лицензии.
Два важных тейка из обсуждения в треде:
— Про AGPL и ИИ-генерированный код. Даже если 95% нового пакета написано нейросетью, а вы внесли только 5% оригинального кода, то лицензия оригинала всё равно распространяется на весь форк. Это не меняет юридический статус AGPL. Отдельный спорный момент: код, созданный ИИ не во всех странах защищён авторским правом вообще.
— Про PyPI security. Команда безопасности PyPI разобрала репорт за 48 часов. Пакеты были удалены. Жаловаться стоит через форму malware («Report a security vulnerability»), а не через общую поддержку. Параллельно можно отправить DMCA-запрос на GitHub.
@zen_of_python (теперь в VK и Max)
Оказалось, это не просто спам-пустышки. Автор-одиночка форкнул его код (лицензия AGPL-3.0), прогнал через LLM для мелких правок, выложил под тремя разными именами без указания источника и без соблюдения условий лицензии.
Два важных тейка из обсуждения в треде:
— Про AGPL и ИИ-генерированный код. Даже если 95% нового пакета написано нейросетью, а вы внесли только 5% оригинального кода, то лицензия оригинала всё равно распространяется на весь форк. Это не меняет юридический статус AGPL. Отдельный спорный момент: код, созданный ИИ не во всех странах защищён авторским правом вообще.
— Про PyPI security. Команда безопасности PyPI разобрала репорт за 48 часов. Пакеты были удалены. Жаловаться стоит через форму malware («Report a security vulnerability»), а не через общую поддержку. Параллельно можно отправить DMCA-запрос на GitHub.
@zen_of_python (теперь в VK и Max)
✍9👌3
Astral берётся за безопасность Python — тот же Ruff-подход, теперь к PyPI
Astral запускает аудит зависимостей и обнаружение вредоносных пакетов. Логика железная — uv уже стоит в точке входа миллионов проектов и видит весь граф зависимостей. Грех не проверять.
Тайпсквоттинг, малварь в PyPI, пакеты-двойники — не абстрактные угрозы.
В Rust, Go и Node подобная инфраструктура существует давно. Python получает её теперь — и, судя по тому, как Astral делали uv и Ruff, делают это они быстро.
@zen_of_python (теперь в VK и Max)
Astral запускает аудит зависимостей и обнаружение вредоносных пакетов. Логика железная — uv уже стоит в точке входа миллионов проектов и видит весь граф зависимостей. Грех не проверять.
Тайпсквоттинг, малварь в PyPI, пакеты-двойники — не абстрактные угрозы.
pip install reqeusts — один символ, и вы узнаёте много нового о supply chain атаках.В Rust, Go и Node подобная инфраструктура существует давно. Python получает её теперь — и, судя по тому, как Astral делали uv и Ruff, делают это они быстро.
@zen_of_python (теперь в VK и Max)
❤🔥11❤1
Устали от уймы API-ключей и танцев с бубном вокруг OpenAI, Claude и Gemini?
Снять эту головную боль может один API-роутер.
Разбираемся на Tproger, почему три разных API могут тормозить ваш проект и как подключить GPT-5.4, Claude Sonnet 4.6 и Gemini 3.1 Pro через единую точку входа без переписывания кода.
Кратко о содержании:
— Что умеет хороший роутер: fallback, балансировка, кеш, единый биллинг.
— Пошаговый гайд подключения через одни API на Python и Node.js.
— Реальный кейс: мультимодельный бот с авто-переключением за 30 минут.
— Подводные камни: контекстные окна, latency, rate limits (и как их обойти).
Читать материал: https://tprg.ru/YWhU
@zen_of_python (теперь в VK и Max)
Снять эту головную боль может один API-роутер.
Разбираемся на Tproger, почему три разных API могут тормозить ваш проект и как подключить GPT-5.4, Claude Sonnet 4.6 и Gemini 3.1 Pro через единую точку входа без переписывания кода.
Кратко о содержании:
— Что умеет хороший роутер: fallback, балансировка, кеш, единый биллинг.
— Пошаговый гайд подключения через одни API на Python и Node.js.
— Реальный кейс: мультимодельный бот с авто-переключением за 30 минут.
— Подводные камни: контекстные окна, latency, rate limits (и как их обойти).
Читать материал: https://tprg.ru/YWhU
@zen_of_python (теперь в VK и Max)
👍4❤3👎2
В Python-сообществе обсуждают свежий PEP 831 под названием «Frame Pointers Everywhere». Авторы предлагают начиная с Python 3.15 по умолчанию собирать CPython и все Си/Rust-расширения с включёнными указателями фреймов (frame pointers).
Зачем это нужно?
Исторически компиляторы (GCC/Clang) для оптимизации вырезают указатели фреймов, освобождая один регистр процессора для вычислений. Проблема в том, что без этих указателей внешние профайлеры (perf, py-spy) и eBPF-тулы не могут нормально размотать стек вызовов. Вы пытаетесь понять, почему тормозит ваш бэкенд, открываете flame-граф, а там вместо нормального трейса — обрывки сишных функций и сломанный стек.
PEP 831 предлагает добавлять флаги
Главные тезисы предложения:
— Системная наблюдаемость из коробки. Любые профилировщики смогут строить идеальные flame-графы для Python-процессов без костылей.
— Нужна поддержка всей экосистемы. Цепочка фреймов работает только если все звенья (CPython, ваши C-экстеншены, библиотеки на Rust) собраны с флагами. Одна библиотека без указателей, и трейс ломается для всего процесса.
— Производительность почти не страдает. Авторы замерили падение производительности: в среднем оно составляет менее 2%. А на задачах, сильно нагружающих eval-loop, код парадоксальным образом работает даже на 1–2% быстрее из-за лучшего распределения инструкций в кэше процессора.
— Уже протестировано в бою. Все бинарники
Для тех, кому нужен каждый процент перформанса (например, в жёстком числовом дробилове), оставят флаг
Метрики по производительности на скрине.
@zen_of_python (теперь в VK и Max)
Зачем это нужно?
Исторически компиляторы (GCC/Clang) для оптимизации вырезают указатели фреймов, освобождая один регистр процессора для вычислений. Проблема в том, что без этих указателей внешние профайлеры (perf, py-spy) и eBPF-тулы не могут нормально размотать стек вызовов. Вы пытаетесь понять, почему тормозит ваш бэкенд, открываете flame-граф, а там вместо нормального трейса — обрывки сишных функций и сломанный стек.
PEP 831 предлагает добавлять флаги
--fno-omit-frame-pointer --mno-omit-leaf-frame-pointer при сборке как самого интерпретатора, так и всех сторонних пакетов, которые компилируются через sysconfig.Главные тезисы предложения:
— Системная наблюдаемость из коробки. Любые профилировщики смогут строить идеальные flame-графы для Python-процессов без костылей.
— Нужна поддержка всей экосистемы. Цепочка фреймов работает только если все звенья (CPython, ваши C-экстеншены, библиотеки на Rust) собраны с флагами. Одна библиотека без указателей, и трейс ломается для всего процесса.
— Производительность почти не страдает. Авторы замерили падение производительности: в среднем оно составляет менее 2%. А на задачах, сильно нагружающих eval-loop, код парадоксальным образом работает даже на 1–2% быстрее из-за лучшего распределения инструкций в кэше процессора.
— Уже протестировано в бою. Все бинарники
python-build-standalone (которые под капотом использует тот же uv) уже давно собираются с этими флагами. То есть половина современного питона уже работает с frame pointers, PEP просто хочет сделать это официальным стандартом.Для тех, кому нужен каждый процент перформанса (например, в жёстком числовом дробилове), оставят флаг
--without-frame-pointers при сборке интерпретатора. На Windows изменения никак не повлияют, там механизм размотки стека работает иначе и проблем с профайлингом нет.Метрики по производительности на скрине.
@zen_of_python (теперь в VK и Max)
❤7✍4
Как писать Python-библиотеки в 2026 году — гайд от разработчика, который недавно прошёл этот путь в продакшене.
Основной тезис: экосистема Python наконец-то консолидировалась. Вместо десятка разрозненных инструментов теперь можно обойтись экосистемой Astral.
Стек:
—
—
—
—
—
—
Ключевой инсайт: uv настолько хорош, что для внутренних библиотек даже не обязательна публикация в PyPI. Можно ставить прямо из git-репозитория:
В конце автор разбирает реальные стеки openai-python и polars. Оба уже на ruff, но openai ещё на старом билд-инструменте (hatchling через rye), а polars обходит стандартный подход из-за Rust-ядра.
Полный гайд: https://stephenlf.dev/blog/python-library-in-2026/
Основной тезис: экосистема Python наконец-то консолидировалась. Вместо десятка разрозненных инструментов теперь можно обойтись экосистемой Astral.
Стек:
—
uv init --lib my-package — проект за одну команду, src-структура, pyproject.toml, .python-version сразу на месте—
ruff — линтинг и форматирование в одном флаконе—
mypy или ty / pyrefly — типизация (автор рекомендует попробовать все три, uv позволяет быстро переключаться)—
pytest + pytest-cov — тесты с coverage—
uv run --python 3.12 — тестирование на разных версиях Python без tox и nox—
pre-commit + CI — контроль качества до момента коммита и при релизеКлючевой инсайт: uv настолько хорош, что для внутренних библиотек даже не обязательна публикация в PyPI. Можно ставить прямо из git-репозитория:
uv add /path/to/my-package, и uv сам разберётся с билдом, кэшем и линковкой.В конце автор разбирает реальные стеки openai-python и polars. Оба уже на ruff, но openai ещё на старом билд-инструменте (hatchling через rye), а polars обходит стандартный подход из-за Rust-ядра.
Полный гайд: https://stephenlf.dev/blog/python-library-in-2026/
👍8❤1
Forwarded from Типичный программист
Откуда в России взялись программисты — история, которую вам не рассказывали
Если вы думаете, что российский IT начался с нулевых — нет. Всё началось на несколько десятилетий раньше, в закрытых НИИ и институтских подвалах.
В конце 1940-х Советскому Союзу понадобились вычислительные машины — моделировать ядерные реакции и считать ракетные траектории вручную было нереально. Учёный Сергей Лебедев построил первую советскую ЭВМ, а потом серию БЭСМ. Пиковая модель, БЭСМ-6, выпускалась почти 20 лет — именно на ней учили программированию в лучших технических вузах.
Культура, сложившаяся в условиях жёстких ограничений, никуда не исчезла. Она и стала фундаментом для Яндекса, Контура и всего остального российского бигтеха.
Читайте все 7 фактов на Tproger
@tproger
Читайте также в VK, Max и Дзен
Если вы думаете, что российский IT начался с нулевых — нет. Всё началось на несколько десятилетий раньше, в закрытых НИИ и институтских подвалах.
В конце 1940-х Советскому Союзу понадобились вычислительные машины — моделировать ядерные реакции и считать ракетные траектории вручную было нереально. Учёный Сергей Лебедев построил первую советскую ЭВМ, а потом серию БЭСМ. Пиковая модель, БЭСМ-6, выпускалась почти 20 лет — именно на ней учили программированию в лучших технических вузах.
Культура, сложившаяся в условиях жёстких ограничений, никуда не исчезла. Она и стала фундаментом для Яндекса, Контура и всего остального российского бигтеха.
Читайте все 7 фактов на Tproger
@tproger
Читайте также в VK, Max и Дзен
👍3🤣3❤1✍1
Forwarded from Python: задачки и вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
🤷♂8👍3
Выбор библиотеки для логирования в Python, автор сделал свежий обзор, кратко перескажу.
Стандартный logging остаётся базой — им пользуются все фреймворки и библиотеки, и через него проходит интеграция с OpenTelemetry. Но конфигурация через dictConfig не самая удобная, а контекст на уровне запроса приходится прокидывать вручную через contextvars.
Главный вывод статьи: выбор библиотеки менее важен, чем практики. Structured output, консистентный контекст, правильные уровни и чистота полей — вот что делает логи полезными в production. Если stdlib с python-json-logger работает, не мигрируйте ради миграции. Если boilerplate мешает — берите structlog.
@zen_of_python
Стандартный logging остаётся базой — им пользуются все фреймворки и библиотеки, и через него проходит интеграция с OpenTelemetry. Но конфигурация через dictConfig не самая удобная, а контекст на уровне запроса приходится прокидывать вручную через contextvars.
structlog — главный кандидат на замену. Процессорный pipeline из коробки даёт redaction, enrichment и sampling. contextvars работают через asyncio без дополнительного кода. При этом можно оставить stdlib на бэке — вся хэндлер-экосистема сохраняется. По бенчмаркам structlog примерно в 2 раза быстрее stdlib и Loguru: 242k ops/s против 139k и 147k соответственно.Loguru — минимум setup, но ценой глобального логгера без иерархии компонентов. Нет нативной OpenTelemetry-интеграции, только через InterceptHandler в обход.Logbook — legacy от Armin Ronacher. Нет structured JSON из коробки, нет OTel. Для новых проектов не рекомендуется.picologging — drop-in replacement на C от Microsoft, в 4–17 раз быстрее, но проект не поддерживается с 2023 года, нет поддержки Python 3.13+. Не для продакшена.Главный вывод статьи: выбор библиотеки менее важен, чем практики. Structured output, консистентный контекст, правильные уровни и чистота полей — вот что делает логи полезными в production. Если stdlib с python-json-logger работает, не мигрируйте ради миграции. Если boilerplate мешает — берите structlog.
@zen_of_python
👍5❤1
Pyrefly — быстрый type checker и language server для Python — добрался до релиза версии 1.0
С бета-версии в ноябре 2025 года прошло больше 60 выпусков. Diagnostics после сохранения ускорились в 2–125 раз, полная проверка крупных проектов — на 20–36%, памяти стало меньше на 40–60%. Соответствие спецификации Python typing выросло с 70% до 90%.
Добавили пресеты конфигурации: от отключённых проверок до strict. Для проектов без конфига — автоматический lightweight basic preset, для миграции с mypy и pyright — автоматическая конвертация настроек.
Улучшили LSP: Safe Delete, точная навигация, hover cards с богатой информацией. Полная поддержка Jupyter notebooks на уровне обычных .py файлов. Расширили поддержку Django, Pydantic, Pytest.
Два новых инструмента для внедрения в существующие кодовые базы: coverage report и baseline files (снимок текущих ошибок, чтобы показывать только новые).
Не скажу, что я план фанат, мне больше по душе ty, но они пока что на версии 0.0.35 т.е. сами дают понять, что делают крутую штуку, но в прод рановато.
@zen_of_python (теперь в VK и Max)
С бета-версии в ноябре 2025 года прошло больше 60 выпусков. Diagnostics после сохранения ускорились в 2–125 раз, полная проверка крупных проектов — на 20–36%, памяти стало меньше на 40–60%. Соответствие спецификации Python typing выросло с 70% до 90%.
Добавили пресеты конфигурации: от отключённых проверок до strict. Для проектов без конфига — автоматический lightweight basic preset, для миграции с mypy и pyright — автоматическая конвертация настроек.
Улучшили LSP: Safe Delete, точная навигация, hover cards с богатой информацией. Полная поддержка Jupyter notebooks на уровне обычных .py файлов. Расширили поддержку Django, Pydantic, Pytest.
Два новых инструмента для внедрения в существующие кодовые базы: coverage report и baseline files (снимок текущих ошибок, чтобы показывать только новые).
Не скажу, что я план фанат, мне больше по душе ty, но они пока что на версии 0.0.35 т.е. сами дают понять, что делают крутую штуку, но в прод рановато.
@zen_of_python (теперь в VK и Max)
❤4👍4
В Python 3.14 в стандартную библиотеку добавили модуль
Это финал длинной истории. PEP 554 в 2017 году описал идею, PEP 684 в 2023 дал каждому интерпретатору собственный GIL, и PEP 734, принятый в июне 2025, превратил всё это в стандартный Python-модуль. До 3.14 функционал был доступен только через C API.
API ровно такой, какой ожидаешь:
Каждый интерпретатор изолирован: своя память, свой GIL, свой импорт-кеш. Простые типы передаются через специальный канал без копирования, сложные идут через сериализацию вроде
Что это даёт:
— Настоящая многозадачность в одном процессе без
— Совместимость с
— Один процесс. Общие файловые дескрипторы, единое управление, без накладных расходов на
У подхода одно главное ограничение: C-расширения. Стабильность под per-interpreter GIL не гарантирована, и многим библиотекам ещё предстоит дозревать. Чистый Python и библиотеки с поддержкой PEP 684 работают, остальные могут падать.
PEP 734 и free-threading решают одну задачу разными способами. Free-threading убирает GIL вообще: больше совместимости, меньше изоляции. Sub-interpreters сохраняют GIL на интерпретатор: меньше совместимости, больше изоляции. Похоже, в долгую Python поддержит оба пути.
Свежий разбор с примерами и архитектурой: https://alexeev-dev.bearblog.dev/running-multiple-interpreters-in-python-code-incredible-speed/
@zen_of_python (теперь в VK и Max)
@zen_of_python (теперь в VK и Max)
concurrent.interpreters: публичный API для запуска нескольких полноценных интерпретаторов внутри одного процесса.Это финал длинной истории. PEP 554 в 2017 году описал идею, PEP 684 в 2023 дал каждому интерпретатору собственный GIL, и PEP 734, принятый в июне 2025, превратил всё это в стандартный Python-модуль. До 3.14 функционал был доступен только через C API.
API ровно такой, какой ожидаешь:
import concurrent.interpreters as interpreters
interp = interpreters.create()
interp.exec('print("Hello from subinterp")')
interp.close()
Каждый интерпретатор изолирован: своя память, свой GIL, свой импорт-кеш. Простые типы передаются через специальный канал без копирования, сложные идут через сериализацию вроде
pickle.Что это даёт:
— Настоящая многозадачность в одном процессе без
multiprocessing. Каждый интерпретатор едет на своём GIL и параллельно работает на отдельном ядре.— Совместимость с
asyncio. CPU-bound подзадачи можно гонять в субинтерпретаторах, а сетевой ввод-вывод оставить в основном цикле событий.— Один процесс. Общие файловые дескрипторы, единое управление, без накладных расходов на
fork и spawn.У подхода одно главное ограничение: C-расширения. Стабильность под per-interpreter GIL не гарантирована, и многим библиотекам ещё предстоит дозревать. Чистый Python и библиотеки с поддержкой PEP 684 работают, остальные могут падать.
PEP 734 и free-threading решают одну задачу разными способами. Free-threading убирает GIL вообще: больше совместимости, меньше изоляции. Sub-interpreters сохраняют GIL на интерпретатор: меньше совместимости, больше изоляции. Похоже, в долгую Python поддержит оба пути.
Свежий разбор с примерами и архитектурой: https://alexeev-dev.bearblog.dev/running-multiple-interpreters-in-python-code-incredible-speed/
@zen_of_python (теперь в VK и Max)
@zen_of_python (теперь в VK и Max)
1❤11🔥4👍3💊1
vLLM-инференс в облаке без собственной инфраструктуры
Selectel запустил Foundation Models Catalog — управляемый сервис, где вы выбираете модель из каталога, а провайдер берёт на себя GPU, масштабирование и наблюдаемость. Движок под капотом: vLLM, питоновская библиотека поверх PyTorch, которую сейчас называют производственным стандартом для инференса.
Что это даёт на практике: вместо того чтобы поднимать свой vLLM-сервер, арендовать GPU и настраивать мониторинг, вы обращаетесь к уже готовому OpenAI-совместимому эндпоинту через openai-клиент или requests. Код тот же, что при локальном запуске. Автомасштабирование, логи и метрики включены.
В каталоге сейчас IBM Granite, Qwen, DeepSeek, Phi, Mistral; скоро Gemma и Whisper. Оплата пока за вычислительные ресурсы, следующим шагом станет тарификация по токенам.
Подробнее на Tproger.
@zen_of_python (теперь в VK и Max)
Selectel запустил Foundation Models Catalog — управляемый сервис, где вы выбираете модель из каталога, а провайдер берёт на себя GPU, масштабирование и наблюдаемость. Движок под капотом: vLLM, питоновская библиотека поверх PyTorch, которую сейчас называют производственным стандартом для инференса.
Что это даёт на практике: вместо того чтобы поднимать свой vLLM-сервер, арендовать GPU и настраивать мониторинг, вы обращаетесь к уже готовому OpenAI-совместимому эндпоинту через openai-клиент или requests. Код тот же, что при локальном запуске. Автомасштабирование, логи и метрики включены.
В каталоге сейчас IBM Granite, Qwen, DeepSeek, Phi, Mistral; скоро Gemma и Whisper. Оплата пока за вычислительные ресурсы, следующим шагом станет тарификация по токенам.
Подробнее на Tproger.
@zen_of_python (теперь в VK и Max)
❤1🔥1
В Long Beach на PyCon US 2026 14 мая прошёл Typing Summit: четыре часа, восемь докладов, один трек. Несколько моментов с саммита.
Гвидо ван Россум открыл саммит докладом про то, что правило PEP 484 «никакого нового синтаксиса для типов» де-факто давно нарушено:
Дуглас Креагер из Astral (его слайд гласил «an OpenAI joint») показал девятистрочный пример, на котором все продакшен-чекеры (mypy, pyright, pyre, Pyrefly, ty) дают неверный ответ:
Прямой вызов
Коннер Нильсен из команды Pyrefly доложил результаты экспериментов с ИИ-агентами. Если код хорошо типизирован и type checker подключён к агенту через обёртку с циклом «думай, действуй, наблюдай»:
— Доля успешных решений на внутренних бенчмарках команды поднялась с 79,6 до 83,9 процента.
— На 21 процент меньше шагов до решения.
— На 14 процентов быстрее по полному времени работы.
На слабо типизированном коде из SWE-bench Verified эффекта почти нет. Type checker ловит ошибки в соседних с задачей файлах, и агент уходит чинить их вместо основной задачи. Наблюдение по моделям: Claude Sonnet 4.5 чинит каждую ошибку, GPT-5 codex игнорирует типы, пока обёртка насильно их не подсунет.
Ещё были доклады про intersection types (Jelle Zijlstra), PEP 827 от Vercel про conditional и mapped types по образцу TypeScript, tensor-shape типы в Pyrefly, и формализация подмножества Python в Lean 4. Полный обзор здесь: https://bernat.tech/posts/pycon-us-2026-typing-summit-recap/
@zen_of_python (теперь в VK и Max)
Гвидо ван Россум открыл саммит докладом про то, что правило PEP 484 «никакого нового синтаксиса для типов» де-факто давно нарушено:
TypedDict, ParamSpec, оператор type и прочее. Его аргумент: пора признать это формально и выбирать приоритеты по реальной боли пользователей. Опирался на Python Typing Survey 2025.Дуглас Креагер из Astral (его слайд гласил «an OpenAI joint») показал девятистрочный пример, на котором все продакшен-чекеры (mypy, pyright, pyre, Pyrefly, ty) дают неверный ответ:
def choose[A](a1: A, a2: A) -> A:
return random.choice([a1, a2])
def partial[X, Y, Z](fn: Callable[[X, Y], Z], x: X) -> Callable[[Y], Z]: ...
p = partial(choose, None)
p(2) # все говорят: ошибка, 2 не None
p("hello") # то же самое
Прямой вызов
choose(None, 2) работает корректно: A решается в None | Literal[2]. После применения partial система ломается. Креагер предлагает другую стратегию: тянуть весь набор констрейнтов как отложенный обобщённый тип, без преждевременной подстановки. ty переезжает на этот подход, внутри используется тернарная структура BDD (двоичные решающие диаграммы с третьим «неопределённым» ребром).Коннер Нильсен из команды Pyrefly доложил результаты экспериментов с ИИ-агентами. Если код хорошо типизирован и type checker подключён к агенту через обёртку с циклом «думай, действуй, наблюдай»:
— Доля успешных решений на внутренних бенчмарках команды поднялась с 79,6 до 83,9 процента.
— На 21 процент меньше шагов до решения.
— На 14 процентов быстрее по полному времени работы.
На слабо типизированном коде из SWE-bench Verified эффекта почти нет. Type checker ловит ошибки в соседних с задачей файлах, и агент уходит чинить их вместо основной задачи. Наблюдение по моделям: Claude Sonnet 4.5 чинит каждую ошибку, GPT-5 codex игнорирует типы, пока обёртка насильно их не подсунет.
Ещё были доклады про intersection types (Jelle Zijlstra), PEP 827 от Vercel про conditional и mapped types по образцу TypeScript, tensor-shape типы в Pyrefly, и формализация подмножества Python в Lean 4. Полный обзор здесь: https://bernat.tech/posts/pycon-us-2026-typing-summit-recap/
@zen_of_python (теперь в VK и Max)
❤3👍1