Vitess | Шардирование для вашей PostgreSQL
Это слой между приложением и базой данных, созданный выходцами из YouTube для защиты от неэффективных запросов и масштабируемости под экстремальными нагрузками. Он также анализирует SQL-запросы на лету, отсекая потенциально опасные. Vitess — система шардирования, основа для Multigrass — проекта по адаптации для PostgreSQL внутри Supabase. Vitess стал частью их инфраструктуры, чтобы приложения могли расти до миллиардов запросов, оставаясь при этом "просто PostgreSQL".
Сайт проекта
#инструмент
@zen_of_python
Это слой между приложением и базой данных, созданный выходцами из YouTube для защиты от неэффективных запросов и масштабируемости под экстремальными нагрузками. Он также анализирует SQL-запросы на лету, отсекая потенциально опасные. Vitess — система шардирования, основа для Multigrass — проекта по адаптации для PostgreSQL внутри Supabase. Vitess стал частью их инфраструктуры, чтобы приложения могли расти до миллиардов запросов, оставаясь при этом "просто PostgreSQL".
Сайт проекта
#инструмент
@zen_of_python
😴2👏1
logging | Эволюционируем от дебага с print()
Вместо хаотичного использования
Почему print() — не лучший выбор
На начальном этапе разработки многие прибегают к такому для отладки. Однако в продакшене такой подход не подходит:
—
— нельзя гибко управлять выводом (в файл, консоль, внешнюю систему)
— невозможно централизованно отключить или настроить поведение.
logging решает все эти задачи и стал стандартом в профессиональной разработке.
База
Минимальный пример:
Этот код выведет в консоль строку «информирующего» уровня. Метод basicConfig задает базовые настройки — например, какой минимальный уровень логов выводить. Уровней несколько:
— DEBUG: подробная отладочная информация;
— INFO: стандартный рабочий поток;
— WARNING: потенциальные проблемы;
— ERROR: ошибки, но программа продолжает работать;
— CRITICAL: фатальные ошибки, возможно аварийное завершение.
Они позволяют фильтровать отладочные данные в зависимости от задачи.
Форматирование вывода
Полезно выводить время, уровень и контекст:
Выведется нечто подобное:
Запись логов в файл
Конечно, командная строка не бесконечная, как и ваше рабочее время, так что разумно записывать логи в файл, чтобы почитать их в нужное время:
Обособленные логгеры
Функция
Такие логгеры можно конфигурировать по отдельности, что удобно в модульных проектах.
Обработчики (Handlers)
В примере ниже все сообщения уровня DEBUG и выше пишутся в файл, а WARNING+ отображаются в консоли:
И напоследок: пишите логи в файл или систему мониторинга вроде Sentry или Grafana.
#основы
Вместо хаотичного использования
print()
стоит освоить встроенный модуль logging
. Почему print() — не лучший выбор
На начальном этапе разработки многие прибегают к такому для отладки. Однако в продакшене такой подход не подходит:
—
print()
не имеет уровней важности (debug, info, error…);— нельзя гибко управлять выводом (в файл, консоль, внешнюю систему)
— невозможно централизованно отключить или настроить поведение.
logging решает все эти задачи и стал стандартом в профессиональной разработке.
База
Минимальный пример:
import logging
logging.basicConfig(level=logging.INFO)
logging.info("Программа запущена")
Этот код выведет в консоль строку «информирующего» уровня. Метод basicConfig задает базовые настройки — например, какой минимальный уровень логов выводить. Уровней несколько:
— DEBUG: подробная отладочная информация;
— INFO: стандартный рабочий поток;
— WARNING: потенциальные проблемы;
— ERROR: ошибки, но программа продолжает работать;
— CRITICAL: фатальные ошибки, возможно аварийное завершение.
Они позволяют фильтровать отладочные данные в зависимости от задачи.
Форматирование вывода
Полезно выводить время, уровень и контекст:
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s"
)
Выведется нечто подобное:
2025-07-07 14:00:00,123 [INFO] Программа запущена
Запись логов в файл
Конечно, командная строка не бесконечная, как и ваше рабочее время, так что разумно записывать логи в файл, чтобы почитать их в нужное время:
logging.basicConfig(
level=logging.INFO,
filename='app.log',
filemode='a',
format="%(asctime)s [%(levelname)s] %(message)s"
)
Обособленные логгеры
Функция
getLogger(name)
позволяет создавать независимые логгеры с именем:
logger = logging.getLogger("myapp")
logger.setLevel(logging.DEBUG)
logger.debug("Отладочная информация")
Такие логгеры можно конфигурировать по отдельности, что удобно в модульных проектах.
Обработчики (Handlers)
В примере ниже все сообщения уровня DEBUG и выше пишутся в файл, а WARNING+ отображаются в консоли:
handler = logging.FileHandler("debug.log")
handler.setLevel(logging.DEBUG)
console = logging.StreamHandler()
console.setLevel(logging.WARNING)
formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(message)s")
handler.setFormatter(formatter)
console.setFormatter(formatter)
logger = logging.getLogger("myapp")
logger.addHandler(handler)
logger.addHandler(console)
logger.setLevel(logging.DEBUG)
И напоследок: пишите логи в файл или систему мониторинга вроде Sentry или Grafana.
#основы
❤9🔥2👌1
lxml обновился
Небезызвестный тул для парсинга XML / HTML в Python-коде получил мажорное обновление, и в нем:
— обновили зависимости;
— отказались от Python 2;
— повысили стабильность и безопасность;
Release Note
#инструмент
@zen_of_python
Небезызвестный тул для парсинга XML / HTML в Python-коде получил мажорное обновление, и в нем:
— обновили зависимости;
— отказались от Python 2;
— повысили стабильность и безопасность;
Release Note
#инструмент
@zen_of_python
🔥5❤1
This media is not supported in your browser
VIEW IN TELEGRAM
dripdrop | Стриминг JSON
Экспериментальный инструмент, который позволяет стримить данные в ваших API. Он возвращает клиенту JSON-скелет с плейсхолдерами вместо данных и постепенно заполняет его по мере готовности асинхронных результатов. DripDrop реализует концепцию прогрессивного JSON, вдохновленную React Server Components, чтобы ваши интерфейсы могли отображать данные без ожидания самых медленных запросов (Skeleton Loader). Быстрые части ответа отправляются сразу, а медленные догружаются потоками через JSON Lines.
Репозиторий проекта
#инструмент
@zen_of_python
💘 — Если нравится Skeleton Loader
Экспериментальный инструмент, который позволяет стримить данные в ваших API. Он возвращает клиенту JSON-скелет с плейсхолдерами вместо данных и постепенно заполняет его по мере готовности асинхронных результатов. DripDrop реализует концепцию прогрессивного JSON, вдохновленную React Server Components, чтобы ваши интерфейсы могли отображать данные без ожидания самых медленных запросов (Skeleton Loader). Быстрые части ответа отправляются сразу, а медленные догружаются потоками через JSON Lines.
Репозиторий проекта
#инструмент
@zen_of_python
💘 — Если нравится Skeleton Loader
❤4💘4
curlify | Из requests в cURL
Инструмент для преобразования запросов из requests в эквивалентные «курлы». Он автоматически добавляет все необходимые флаги, включая
Репозиторий проекта
#инструмент
@zen_of_python
Инструмент для преобразования запросов из requests в эквивалентные «курлы». Он автоматически добавляет все необходимые флаги, включая
-X
, -H
, -d
, --compressed
и другие, чтобы команда точно отражала параметры исходного запроса. Благодаря опции pretty=True
можно получить красиво отформатированную, многострочную cURL-команду, удобную для чтения и вставки в консоль. Библиотека заботится о безопасности и корректности, надежно экранируя кавычки и специальные символы для совместимости с командной строкой.Репозиторий проекта
#инструмент
@zen_of_python
👍3
Таро врёт! В отличие от нашей IT-колоды
Цифровые арканы говорят с вами и проливают свет на ранее неведомые потоки информации. Вытяните «Карту дня» и получите мудрый совет судьбы: https://tprg.ru/ldLR
Реклама
Цифровые арканы говорят с вами и проливают свет на ранее неведомые потоки информации. Вытяните «Карту дня» и получите мудрый совет судьбы: https://tprg.ru/ldLR
Реклама
😁6👎2🔥1🙉1
throttled-py | Ограничение частоты запросов
Если вам нужно защищиться от DDoS-атак, контролировать затраты и в целом оптимизировать производительность, эта библиотека поддерживает популярные алгоритмы: Fixed / Sliding Window, Token Bucket и проч. Она подходит для как синхронных, так и асинхронных приложений. Для хранения состояния лимитов можно использовать как быстрый In-Memory режим, так и масштабируемый Redis-бэкенд. «Питонический дроссель» интегрируется с MCP Python SDK, позволяя эффективно контролировать частоту вызовов в диалоговых процессах моделей.
Репозиторий проекта
#инструмент
@zen_of_python
Если вам нужно защищиться от DDoS-атак, контролировать затраты и в целом оптимизировать производительность, эта библиотека поддерживает популярные алгоритмы: Fixed / Sliding Window, Token Bucket и проч. Она подходит для как синхронных, так и асинхронных приложений. Для хранения состояния лимитов можно использовать как быстрый In-Memory режим, так и масштабируемый Redis-бэкенд. «Питонический дроссель» интегрируется с MCP Python SDK, позволяя эффективно контролировать частоту вызовов в диалоговых процессах моделей.
Репозиторий проекта
#инструмент
@zen_of_python
👍1🥱1
Вопросы подписчиков
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:
— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;
#вопросы_новичков
@zen_of_python
🌚1🤝1
Forwarded from Типичный программист
Честный ресёрч найма в IT прямо с рынка
Вместе с Proglib мы разобрали, почему айтишники реально уходят с работы, по каким признакам вычислить токсичный коллектив и какие HR-трюки бесят разработчиков больше всего. Если ещё не читали — советуем это исправить❤️
Бонусом мы подготовили ещё два полезных лонгрида из этого исследования:
— Где искать работу в IT: лайфхаки и топ-площадки
— Каких разработчиков переизбыток и кому сейчас сложнее найти вакансию
Сохраняйте и кидайте коллегам!
Вместе с Proglib мы разобрали, почему айтишники реально уходят с работы, по каким признакам вычислить токсичный коллектив и какие HR-трюки бесят разработчиков больше всего. Если ещё не читали — советуем это исправить❤️
Бонусом мы подготовили ещё два полезных лонгрида из этого исследования:
— Где искать работу в IT: лайфхаки и топ-площадки
— Каких разработчиков переизбыток и кому сейчас сложнее найти вакансию
Сохраняйте и кидайте коллегам!
❤1😁1🥱1