Niquests — это современная версия requests: быстрее и с поддержкой новых фич протокола HTTP/2 и HTTP/3. Автор позиционирует вообще как самую быструю и показывает бенчмарки с обгоном httpx и aiohttp по количеству запросов в секунду.
Основная фишка — вместо кучи соединений используется настоящий HTTP/2+ multiplexing — много запросов через несколько установленных коннектов. На больших нагрузках это решает. По сути это то, как делают запросы современные браузеры.
Drop-in замена для requests — тот же API, просто меняешь импорт. При этом автоматически работает HTTP/1.1, HTTP/2 и HTTP/3 — либа выбирает лучший протокол сама. Есть Async, WebSocket через HTTP/1, 2, 3, DNS‑over‑HTTPS, DNSSEC и поддержка нового питона без GIL.
Если просто иногда дёргаете один‑два API — можно не париться и оставаться на той либе, что сейчас используете. Если хотя бы сотни запросов, то можно попробовать получить прирост скорости просто заменой импорта.
📎 Код на GitHub, на видео тот самый бенчмарк
@zen_of_python
Основная фишка — вместо кучи соединений используется настоящий HTTP/2+ multiplexing — много запросов через несколько установленных коннектов. На больших нагрузках это решает. По сути это то, как делают запросы современные браузеры.
Drop-in замена для requests — тот же API, просто меняешь импорт. При этом автоматически работает HTTP/1.1, HTTP/2 и HTTP/3 — либа выбирает лучший протокол сама. Есть Async, WebSocket через HTTP/1, 2, 3, DNS‑over‑HTTPS, DNSSEC и поддержка нового питона без GIL.
Если просто иногда дёргаете один‑два API — можно не париться и оставаться на той либе, что сейчас используете. Если хотя бы сотни запросов, то можно попробовать получить прирост скорости просто заменой импорта.
@zen_of_python
This media is not supported in your browser
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒9⚡1🔥1
На Reddit обсудили, с какими инструментами питонисты стартуют новые проекты в 2026. В треде 170+ комментариев, подведу краткие итоги.
А вот в тайп-чекинге единства нет. Одни ждут pyright, другие пробуют ty или pyrefly. Ruff сам по себе типы не проверяет, нужен отдельный инструмент.
Что ещё упоминают
🔘
🔘
🔘
Для старта нового проекта
Это готовый рецепт, которого пока что придерживается большинство в сообществе.
А что вы используете? Кто-то уже пробовал
@zen_of_python
uv + ruff + httpx + pytest — этот стек набрал больше всего голосов. Poetry и venv уходят в прошлое, uv забирает всё: и venv, и зависимости, и запуск скриптов.А вот в тайп-чекинге единства нет. Одни ждут pyright, другие пробуют ty или pyrefly. Ruff сам по себе типы не проверяет, нужен отдельный инструмент.
Что ещё упоминают
pydantic — почти как стандарт для валидацииdirenv — автоматическая активация окружения при входе в папкуpandas остаётся дефолтом, но для больших данных смотрят на PySpark/PolarsДля старта нового проекта
uv init myproject
cd myproject
uv add --dev ruff pytest
Это готовый рецепт, которого пока что придерживается большинство в сообществе.
А что вы используете? Кто-то уже пробовал
ty?@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11❤4🤔1
Бывший CTO поделился тестом, который за 15 секунд отсеивал половину кандидатов. И это не фигура речи, реально 53% ошибались.
Я специально спрячу объяснение за спойлер, чтобы вы могли перейти по ссылке и попробовать решить задачу. Осуждать никого не будем, просто проверьте себя.
Если ваш ответ 1, то поздравляю, вы быстро в уме разобрали код и поняли логику. Если -11, то значит вы скопировали код в ChatGPT или интерпретатор и поленились делать в уме. Так же поступают в среднем 50% кандидатов.
Дело в том, что в коде спрятан знак =, который появляется только при копировании и условие меняется на >= 3. Ну и ответ, конечно, тоже.
И в чём смысл?
Не то чтобы копировать — это прям плохо. Смысл скорее в том, что для простой задачи быстрее прогнать код в голове, чем открывать терминал. Если кандидат не может выполнить три итерации цикла мысленно — это сигнал.
Автор признаёт: метод не идеальный, бывают false negatives. Но он вдвое сокращает время на обработку откликов.
@zen_of_python
Я специально спрячу объяснение за спойлер, чтобы вы могли перейти по ссылке и попробовать решить задачу. Осуждать никого не будем, просто проверьте себя.
Дело в том, что в коде спрятан знак =, который появляется только при копировании и условие меняется на >= 3. Ну и ответ, конечно, тоже.
И в чём смысл?
Не то чтобы копировать — это прям плохо. Смысл скорее в том, что для простой задачи быстрее прогнать код в голове, чем открывать терминал. Если кандидат не может выполнить три итерации цикла мысленно — это сигнал.
Автор признаёт: метод не идеальный, бывают false negatives. Но он вдвое сокращает время на обработку откликов.
@zen_of_python
🔥15❤6
Один разработчик реализовал
Бенчмарки (RTX 3090)
🔘 1 MB: 1,09x (почти одинаково)
🔘 5 MB: 1,80x
🔘 50 MB: 3,43x
🔘 100 MB: 4,37x
Среднее ускорение: 3,45x, пропускная способность: 0,79 GB/s
Ключевые фичи
🔘 Точная семантика Python (leftmost, non-overlapping replacements)
🔘 Streaming mode — файлы больше VRAM обрабатываются чанками
🔘 Session API — несколько замен подряд без переинициализации
🔘 Thread-safe
Пример
➡️ Зачем это нужно
Автор делал GPU-компрессию и хотел убрать лишние трансферы между CPU и GPU. Другие применения: санитизация логов, обработка сетевых пакетов, любые задачи с поиском/заменой в больших бинарных данных.
И давайте признаем, это просто круто, search-replace на CUDA блин :)
📎 Код на GitHub
@zen_of_python
bytes.replace() из Python на CUDA — для обработки многогигабайтных файлов прямо на GPU без передачи данных на CPU.Бенчмарки (RTX 3090)
Среднее ускорение: 3,45x, пропускная способность: 0,79 GB/s
Ключевые фичи
Пример
from cuda_replace import CReplaceLib
lib = CReplaceLib()
result = lib.unified(data, b"pattern", b"replacement")
# Для больших файлов
cleaned = lib.gpu_streaming(huge_data, b"old", b"new", chunk_size=256*1024*1024)
Автор делал GPU-компрессию и хотел убрать лишние трансферы между CPU и GPU. Другие применения: санитизация логов, обработка сетевых пакетов, любые задачи с поиском/заменой в больших бинарных данных.
И давайте признаем, это просто круто, search-replace на CUDA блин :)
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9⚡4
Вышел pandas 3.0: строки теперь хранятся через PyArrow (до 70% экономии памяти, до 13x быстрее), а Copy-on-Write стал обязательным.
Что сломается
🔘 Цепочечное присваивание больше не работает:
🔘 Проверки dtype:
Как мигрировать
1️⃣ Обновитесь до pandas 2.3, уберите warnings
3️⃣ Включите в тестах:
3️⃣ Найдите
4️⃣ Обновляйтесь до 3.0
Требования: Python 3.11+, NumPy 1.26.0+, PyArrow 13.0.0+
Для production лучше подождать пару недель — релиз свежий.
📎 Changelog, GitHub
@zen_of_python
Что сломается
# Было: работало с warning'ом
df["foo"][df["bar"] > 5] = 100
# Стало: молча НЕ работает
# Правильно:
df.loc[df["bar"] > 5, "foo"] = 100
# Было
if df['col'].dtype == object: ...
# Стало
if pd.api.types.is_string_dtype(df['col']): ...
Как мигрировать
pd.options.future.infer_string = Truedtype == object и цепочечные присваиванияТребования: Python 3.11+, NumPy 1.26.0+, PyArrow 13.0.0+
Для production лучше подождать пару недель — релиз свежий.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🫡5🔥1
Репозиторий anthropics/skills — самый популярный Python-репозиторий на GitHub прямо сейчас. +1400 звёзд в день, 50 тыс. уже набежало.
➡️ Что такое Skills
Skills — это папки с инструкциями и скриптами, которые Claude динамически подгружает для выполнения специализированных задач. По сути, плагины для ИИ: вместо того чтобы каждый раз объяснять модели, как работать с вашими процессами, вы описываете это один раз в файле.
Примеры: создание документов с учётом правил компании, анализ данных по специфическим воркфлоу, генерация MCP-серверов, тестирование веб-приложений.
➡️ Как устроено
Skill — это YAML с названием, описанием и markdown-инструкциями. Можно указать примеры использования и ограничения. Claude читает это при активации и следует описанным правилам.
➡️ Зачем это вам
Если используете Claude для повторяющихся задач — Skills позволяют один раз описать процесс и использовать повторно. Документные skills (PDF, DOCX, XLSX) уже готовы. Для собственных — есть шаблон и примеры.
📎 Репозиторий
@zen_of_python
Skills — это папки с инструкциями и скриптами, которые Claude динамически подгружает для выполнения специализированных задач. По сути, плагины для ИИ: вместо того чтобы каждый раз объяснять модели, как работать с вашими процессами, вы описываете это один раз в файле.
Примеры: создание документов с учётом правил компании, анализ данных по специфическим воркфлоу, генерация MCP-серверов, тестирование веб-приложений.
Skill — это YAML с названием, описанием и markdown-инструкциями. Можно указать примеры использования и ограничения. Claude читает это при активации и следует описанным правилам.
---
name: my-skill-name
description: What this skill does
---
# Instructions for Claude...
Если используете Claude для повторяющихся задач — Skills позволяют один раз описать процесс и использовать повторно. Документные skills (PDF, DOCX, XLSX) уже готовы. Для собственных — есть шаблон и примеры.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2
Вышел packaging 26.0 — тот самый релиз с ускорением в три раза, о котором писал пару недель назад.
Напомню контекст:packaging — библиотека для работы с версиями и зависимостями. Встроена в pip, а pip — в Python. 650+ миллионов скачиваний в месяц.
➡️ Что в релизе
Обещанные оптимизации: регулярки больше не перекомпилируются каждый раз, добавлены
➡️ Новые фичи
PEP 751 — поддержка pylock-файлов для воспроизводимых установок. PEP 794 — импорт метаданных имён пакетов. Positional pattern matching для
➡️ Breaking changes
Обновление подтянется автоматически с новыми версиями pip.
📎 Changelog, PyPI
@zen_of_python
Напомню контекст:
Обещанные оптимизации: регулярки больше не перекомпилируются каждый раз, добавлены
__slots__ для Version и Specifier, улучшено кэширование. Результат — парсинг версий стал в три раза быстрее, количество создаваемых объектов в pip упало с 4,8 млн до 400 тыс.PEP 751 — поддержка pylock-файлов для воспроизводимых установок. PEP 794 — импорт метаданных имён пакетов. Positional pattern matching для
Version и Specifier — теперь работает match version:from packaging.version import Version
match Version("3.14.0"):
case Version(major=3, minor=14):
print("Python 3.14!")
.contains() теперь возвращает False вместо исключения для невалидных версий. Если ловили InvalidVersion — проверьте код.Обновление подтянется автоматически с новыми версиями pip.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12
Django в продакшене на 500 000 пользователей в месяц — не стартап, а французское правительство.
La Suite — экосистема цифровых инструментов для госслужащих Франции. 15 министерств, 500 000 активных пользователей ежемесячно.
Что внутри:
🔘 Tchap — мессенджер на Matrix, 375 000 активных пользователей ежемесячно
🔘 Visio — видеозвонки с ИИ-транскрипцией на LiveKit
🔘 Docs — совместное редактирование
🔘 Grist — таблицы как база данных
🔘 France Transfert — передача больших файлов
Бэкенд на Django. Весь код в открытом доступе.
Данные хранятся на SecNumCloud во Франции с полной портабельностью — экспорт в .ppt, .xls, .odt без vendor lock-in.
Это хороший пример того, как выглядит Django в govtech-продакшене уровня страны. Можно изучить архитектуру, посмотреть как они решают масштабирование, безопасность и интеграцию с legacy-системами.
📎 La Suite, GitHub
@zen_of_python
La Suite — экосистема цифровых инструментов для госслужащих Франции. 15 министерств, 500 000 активных пользователей ежемесячно.
Что внутри:
Бэкенд на Django. Весь код в открытом доступе.
Данные хранятся на SecNumCloud во Франции с полной портабельностью — экспорт в .ppt, .xls, .odt без vendor lock-in.
Это хороший пример того, как выглядит Django в govtech-продакшене уровня страны. Можно изучить архитектуру, посмотреть как они решают масштабирование, безопасность и интеграцию с legacy-системами.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍2🔥2
Forwarded from Типичный программист
От кого только не прилетает самокатчикам. Иногда за дело, иногда нет. Не нам судить, но мы обсудим, что делать, например, с явными нарушителями? Как их контролировать, если операторы кикшеринга не пускают в свои данные? Закрывать глаза на хаос на тротуарах или тотально запрещать?
Мы получили кейс, где за 4 месяца команда из 7 человек создала платформу мониторинга, которая фиксирует самокатовские нарушения. Их задачей было сделать инструмент для структурирования данных, чтобы чиновники и операторы нашли общий язык.
Планируем поделиться с вами целой пачкой интересных артефактов. Ставьте 👀, если любопытно узнать их все.
Please open Telegram to view this post
VIEW IN TELEGRAM
👀11👍4☃1
Bandit — SAST-сканер для Python от PyCQA (те же люди, что делают pylint и flake8). Парсит AST, ищет типичные дыры: eval(), хардкод паролей, слабая криптография, небезопасные temp-файлы.
➡️ Как работает
Каждый файл → AST → прогон плагинов по нодам → отчёт. У каждой находки два атрибута: severity (критичность) и confidence (уверенность, что это реальная проблема). Это помогает расставить приоритеты — сначала High/High, потом остальное.
Интеграция:
Есть официальный GitHub Action (
Для легаси-проектов: сохраняешь текущие находки в baseline, дальше CI показывает только новые. Старые никуда не деваются, но не блокируют билд.
➡️ Bandit vs Semgrep
🔘 Правила из коробки — Bandit 68, Semgrep 166 для Python
🔘 Скорость — Bandit быстрее на мелких репо, у Semgrep overhead на старте
🔘 Кастомные правила — у Semgrep проще (YAML), у Bandit нужно писать плагин
🔘 Точность — Bandit точнее на типовых паттернах, Semgrep гибче, но больше false positives
📎 Код на GitHub
@zen_of_python
Каждый файл → AST → прогон плагинов по нодам → отчёт. У каждой находки два атрибута: severity (критичность) и confidence (уверенность, что это реальная проблема). Это помогает расставить приоритеты — сначала High/High, потом остальное.
Интеграция:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/PyCQA/bandit
rev: 1.7.5
hooks:
- id: bandit
args: ['-ll', '-ii']
Есть официальный GitHub Action (
PyCQA/bandit-action@v1) и расширение для VS Code.Для легаси-проектов: сохраняешь текущие находки в baseline, дальше CI показывает только новые. Старые никуда не деваются, но не блокируют билд.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4