Не могу не поделиться один классным фреймворком - FastStream. Он существенно упрощает реализацию консьюмеров и продюсеров для RabbitMQ, Kafka и т.п. И за счёт этого позволяет сконцентрироваться на бизнес-логике. В комплекте идёт удобный DI (dishka), валидация через pydantic, генерация AsyncAPI, подключение по OpenTelemetry, метрики, мидлвари и куча клиентов. Настоятельно рекомендую!
И нет, FastStream решает более общую задачу, нежели Celery; так что сравнивать их некорректно.
https://habr.com/ru/articles/822505/ #python
И нет, FastStream решает более общую задачу, нежели Celery; так что сравнивать их некорректно.
https://habr.com/ru/articles/822505/ #python
Хабр
FastStream — новый убийца Celery?
FastStream - это относительно новая блестящая игрушка в руках Python'истов, которая создана специально для работы с брокерами сообщений. В Python сложилось устойчивое убеждение, что если мы работаем с...
👍8
Хороший доклад про эволюцию средств установки python пакетов. Вечером за ужином самое то :)
tl;dr Экосистема python сломана, проклята и никто чинить её не собирается.
https://www.youtube.com/watch?v=2_fpwTaSQgE #python
tl;dr Экосистема python сломана, проклята и никто чинить её не собирается.
https://www.youtube.com/watch?v=2_fpwTaSQgE #python
YouTube
Николай Марков. Управление пакетами — хорошее, плохое, злое?
Николай Марков
Data Platform Lead, Altenar
Управление пакетами — хорошее, плохое, злое?
Экосистема пакетов Python существует очень давно, и в этом есть как плюсы, так и минусы. С одной стороны, мы имеем один из самых больших репозиториев пакетов на все…
Data Platform Lead, Altenar
Управление пакетами — хорошее, плохое, злое?
Экосистема пакетов Python существует очень давно, и в этом есть как плюсы, так и минусы. С одной стороны, мы имеем один из самых больших репозиториев пакетов на все…
👍3😭1
Ну вот фоновые задачи добрались и до Django. У меня по этому случаю смешанные чувства: с одной стороны фиче-паритет с FastAPI, с другой - а стоит ли их использовать? Типичных проблем из теории очередей они не решают. Нет ни персистентности, ни повторов, но хуже - смешение в одном контейнере разных типов нагрузки. Т.е. если фоновая задача затупит или начнёт жрать CPU, то хелсчек может и не успеть пройти, и контейнер будет убит. Получается, из-за неё умрёт вполне рабочий процесс веб-приложения. Звучит как-то странно.
Альтернатива - Celery. Да, это очень навороченный фреймворк, но ведь Postgres и Redis у вас уже есть в проекте? Ну будет ещё плюс одна зависимость (и небольшое усложнение инфраструктуры). Зато надёжнее будет работать.
https://www.bitecode.dev/p/whats-up-python-django-background #python
Альтернатива - Celery. Да, это очень навороченный фреймворк, но ведь Postgres и Redis у вас уже есть в проекте? Ну будет ещё плюс одна зависимость (и небольшое усложнение инфраструктуры). Зато надёжнее будет работать.
https://www.bitecode.dev/p/whats-up-python-django-background #python
www.bitecode.dev
What's up Python? Django background tasks, a new Python REPL, bye bye gunicorn...
June, 2024
👍2
pytest - непростой фреймворк. Это мощный комбайн, под капотом которого происходит много действий (в том числе и магических). Поэтому если вы хотите подружится с ним, понять и принять, то лучший способ - покопаться в его внутрянке и решить какую-то учебную задачу. Например, переделать вывод результатов во что-то более читаемое.
P.S. Бонусом идёт список полезных материалов по pytest на самом Хабре в конце статьи.
https://habr.com/ru/articles/844728/ #python
P.S. Бонусом идёт список полезных материалов по pytest на самом Хабре в конце статьи.
https://habr.com/ru/articles/844728/ #python
Хабр
Как адаптировать терминальные отчёты pytest под свои интересы
Всем хорош pytest, но его терминальный вывод можно сделать ещё полезней. Наверняка для этого есть готовые плагины и даже фреймворки. Но можно сделать и самостоятельно. А попутно разобраться в...
🔥4❤1👍1👏1
За прошлую неделю мне попалось несколько материалов на тему оптимизации python. Перечислю здесь основные:
- суперинструкции - объединение связанных опкодов в один
- специализация - подстановка специализированной функции сложения двух целых чисел вместо обобщённой (как пример)
- векторизация вызовов - больше не создаются промежуточные структуры при вызове функций
Даже без jit ускорение в полтора-два раза уже хорошо. Хотя нужно ли считать специализацию частью jit? 🤔
https://habr.com/ru/companies/beget/articles/839348/ и https://www.youtube.com/watch?v=G_KCQ0dniv0.
https://pypi.org/project/specialist/ - библиотека, которая подсвечивает оптимизированный код.
Добавил также ссылки в свой blue-book. #python
- суперинструкции - объединение связанных опкодов в один
- специализация - подстановка специализированной функции сложения двух целых чисел вместо обобщённой (как пример)
- векторизация вызовов - больше не создаются промежуточные структуры при вызове функций
Даже без jit ускорение в полтора-два раза уже хорошо. Хотя нужно ли считать специализацию частью jit? 🤔
https://habr.com/ru/companies/beget/articles/839348/ и https://www.youtube.com/watch?v=G_KCQ0dniv0.
https://pypi.org/project/specialist/ - библиотека, которая подсвечивает оптимизированный код.
Добавил также ссылки в свой blue-book. #python
Хабр
Вызовы функций в Python по прежнему медленные? Анализ последних оптимизаций в CPython
Я наткнулся на пост в X/Twitter , где Pritam обнаружил, что его решение на Leetcode работало медленнее, когда он использовал встроенную функцию min, производительность улучшилась, когда...
👍3
Хорошая статья, которая подробно описывает что может делать pydantic. На самом деле не так чтобы много (зато исчерпывающе) - конвертация данных, валидация да связь с ORM.
Но читая, я вспомнил те времена, когда в python ещё не было типизации. И я не помню, чтобы было много ошибок с этим связано. Возможно, потому что с типами работали более аккуратно. Если число - то только int, а не str(int); если поле опционально - то оно всё равно требуется в схеме, хоть и с None значением. Но такое ощущение, что современные инструменты поощряют подобную небрежность. Не ведитесь! Это провокация! Используйте strict=True.
https://habr.com/ru/companies/amvera/articles/851642/ #python
Но читая, я вспомнил те времена, когда в python ещё не было типизации. И я не помню, чтобы было много ошибок с этим связано. Возможно, потому что с типами работали более аккуратно. Если число - то только int, а не str(int); если поле опционально - то оно всё равно требуется в схеме, хоть и с None значением. Но такое ощущение, что современные инструменты поощряют подобную небрежность. Не ведитесь! Это провокация! Используйте strict=True.
https://habr.com/ru/companies/amvera/articles/851642/ #python
Хабр
Pydantic 2: Полное руководство для Python-разработчиков — от основ до продвинутых техник
Недавно я обратил внимание, что в русскоязычном интернете очень мало доступной и понятной информации о библиотеке Pydantic, особенно об её обновлённой версии 2. Это кажется странным, потому что...
👍5
Хороший доклад-наброс на Go, у самого схожие мысли. Особенно понравилось про git-вандализм и simple vs easy. Не знаю к сожалению или к счастью, но за 8 лет так и не попалась задача, которую бы стоило решать именно на Go.
И поддержу спикера - у всех языков есть странности. Вопрос насколько вы готовы их принять.
https://www.youtube.com/watch?v=jkem38kdX50&list=WL&index=105 #python #golang
И поддержу спикера - у всех языков есть странности. Вопрос насколько вы готовы их принять.
https://www.youtube.com/watch?v=jkem38kdX50&list=WL&index=105 #python #golang
YouTube
Moscow Python Meetup №93. Сурен Хоренян (ВК Реклама) Python нельзя Go: меня не зацепил новый тренд
Будучи Python разработчиком я познакомился с Go и не нашёл причин переходить на Go для веб-разработки и прикладных задач. Возможно, я чего-то не понял. В докладе поделюсь наблюдениями и расскажу, почему Go меня не очаровал.
Слайды: https://moscowpython.…
Слайды: https://moscowpython.…
😁4❤1👍1🤔1💩1
Опубликовал новую статью на Хабре. В ней подробно разбираю как работает новый интерпретатор в python. Воробушкам от хлебушка, чтобы вот всем было понятно. Буду признателен за лайки на Хабре.
https://habr.com/ru/companies/tochka/articles/895004/ #python
https://habr.com/ru/companies/tochka/articles/895004/ #python
Хабр
Tail-calling: разбираемся в новом интерпретаторе в CPython
В последнее время в моём инфополе появилось много шума вокруг нового типа интерпретатора в Python: tail-calling. Я посмотрел PR на Github , из которого понял, что [[clang::musttail]] должен ускорить...
👍14🔥2
Хорошее исследование по SSTI (Server-side template injection) - возможности запустить код через шаблонизатор. Для взаимодействия с клиентом их, по сути, всего 2: Jinja2 и Django templates. Всякие mako могут использоваться только для генерации sqlalchemy миграций да каких-нибудь конфигураций. Так вот, авторам первых двух приходится отчаянно бороться между удобством/функциональностью и безопасностью. Я за второй вариант. А победителя вы узнаете в статье.
https://habr.com/ru/companies/bizone/articles/896556/ #python
https://habr.com/ru/companies/bizone/articles/896556/ #python
Хабр
SSTI в Python под микроскопом: разбираем Python-шаблонизаторы
Привет, Хабр! Меня зовут Сергей Арефьев. Я специалист отдела анализа защищенности приложений в компании BI.ZONE. В этой статье хочу подробно раскрыть тему SSTI (server-side template...
👍3
В этом сезоне Podlodka Python Crew мы решили выбрать один самый полезный с практической точки зрения доклад и опубликовать его бесплатно. Я активно участвовал в его подготовке, и считаю, что он получился просто 🔥 Настоятельно рекомендую его посмотреть, т.к. перечисленные не очевидные моменты могут больно выстрелить на проде.
https://www.youtube.com/watch?v=6LdhvDU8KSM #python
https://www.youtube.com/watch?v=6LdhvDU8KSM #python
YouTube
Доклад: Оптимизации, которые вы могли упустить / Александр Кучин (Литрес)
Разберём, какие проблемы производительности могут поджидать нас в нашем же коде. Некоторые из них очень распространены, хотя и до жути банальны; другие же скрываются в библиотеках, которые мы используем каждый день. Эти потерянные на проде оптимизации вы…
👍8
В python добавляют очередной тип строк, который явно разделяет шаблон и его аргументы. Выглядеть это будет примерно так:
Т.е.
В общем, меня не покидает ощущение, что python становится слишком фичастым. И когда-нибудь это обязательно стрельнет.
https://habr.com/ru/articles/911196/ #python
attributes = {"src": "shrubbery.jpg", "alt": "looks nice"}
template = t"<img {attributes:.2f} />"
assert html(template) == '<img src="shrubbery.jpg" alt="looks nice" />'
assert template.strings == ("<img ", " />")
assert template.interpolations == attributes
assert template.interpolations[0].format_spec == ".2f"Т.е.
html - кастомная функция, которая разворачивает аргумент-словарь у строки в набор тегов. Я вот так сходу не могу придумать мест применения, кроме экранирования секретов в логах. Но во-первых, это решается по-другому (своим логгером), а во-вторых, уже есть string.Template, который делает нечто похожее. Ну ладно, ещё защита от инъекций (XSS, SQL и т.п.), но там это делается совсем другим способом.В общем, меня не покидает ощущение, что python становится слишком фичастым. И когда-нибудь это обязательно стрельнет.
https://habr.com/ru/articles/911196/ #python
Хабр
Новый лучший способ форматирования строк в Python
Привет, Хабр! Приближается релиз Python 3.14, который несет нам множество нововведений. Среди них — новый способ форматирования строк. Давайте посмотрим, что из себя представляют t-строки, на что они...
❤3👍2😱1
Кто-то считает DjangoORM злом, а я думаю, что инструментом просто надо уметь пользоваться. А т.к. это обёртка над другой технологией, то надо разбираться и в ней. Вот хорошая и лёгкая для чтения статья как в действительности DjangoORM работает с БД. Приведены некоторые оптимизации, нюансы использования и т.п. Хороший кандидат, кстати, для перевода на Хабр.
Но не нужно применять все эти хаки постоянно. ИМХО, они нужны больше для оптимизации - когда действительно что-то идёт не так. Какая разница сколько у вас индекс весит, если база нагружена на 20% и свободного места ещё 100Gb.
https://hakibenita.com/django-foreign-keys #python
Но не нужно применять все эти хаки постоянно. ИМХО, они нужны больше для оптимизации - когда действительно что-то идёт не так. Какая разница сколько у вас индекс весит, если база нагружена на 20% и свободного места ещё 100Gb.
https://hakibenita.com/django-foreign-keys #python
Hakibenita
How to Get Foreign Keys Horribly Wrong
Common Pitfalls and Potential Optimizations in Django
👍4❤3
Уже через несколько дней я выступаю на PyCon с докладом про эволюцию CPython. В процессе подготовки пришлось перелопатить кучу материала одна из причин, почему вы должны выступать на конфах . И конечно же, нельзя обойти стороной инициативу Faster CPython. По ней сообщество хотело ускорить CPython в 5 раз до 2027 года. К сожалению, это уже вряд ли осуществимо из-за массовых увольнений в Microsoft, но прогресс есть. По сравнению с 3.10 версия 3.14 работает минимум на 50% быстрее. И вот основные направления:
- tail-calling интерпретатор
- free-threading Python
- многопоточка через сабинтерпретаторы
- Copy-and-Patch JIT
- JIT через трейсинг
Вот про виды JIT и идёт речь в докладе. Спикер рассказывает какой путь проходит строчка python-кода, какие оптимизации уже реализованы, а какие планируются в следующем релизе.
https://www.youtube.com/watch?v=NE-Oq8I3X_w #python
- tail-calling интерпретатор
- free-threading Python
- многопоточка через сабинтерпретаторы
- Copy-and-Patch JIT
- JIT через трейсинг
Вот про виды JIT и идёт речь в докладе. Спикер рассказывает какой путь проходит строчка python-кода, какие оптимизации уже реализованы, а какие планируются в следующем релизе.
https://www.youtube.com/watch?v=NE-Oq8I3X_w #python
YouTube
What they don't tell you about building a JIT compiler for CPython - Brandt Bucher
Despite their reputation, just-in-time compilers are not magic “go faster” machines. Developing and maintaining any sort of optimizing compiler for even a single platform, let alone all of Python’s most popular supported platforms, is an incredibly complicated…
👍15❤5🔥5
Состоялся релиз документального фильма про CPython. Ух, я его аж с июня ждал :popcorn: Рассказывают сами разработчики как язык вырос из пет-проекта, завоевал мир, а потом чуть не рухнул. Даже перевода ждать не буду. Теперь у вас есть что посмотреть в воскресенье 😉 Потому что в субботу жду на конфе 😁
https://www.youtube.com/watch?v=GfH4QL4VqJ0 #python
https://www.youtube.com/watch?v=GfH4QL4VqJ0 #python
YouTube
The Story of Python and how it took over the world | Python: The Documentary
This is the story of the world's most beloved programming language: Python. What began as a side project in Amsterdam during the 1990s became the software powering artificial intelligence, data science and some of the world’s biggest companies. But Python's…
❤5🔥4
Работать с памятью - сложно, а дёргать malloc каждый раз - дорого. Поэтому почти во всех языках программирования реализован свой менеджер памяти. Да, они могут отличаться, но суть одна - выделяем сразу большой объём, а уже пользовательские объекты распределяем в нём. Из плюсов - быстро; из минусов - память обратно в ОС может и не вернуться. Так что во многих веб-серверах, которые должны работать долго => память будет утекать, придумали костыль в виде харакири. Процесс просто перезапускается после того, как обслужил N запросов.
Статья ещё хороша тем, что есть приложение на PyQt5 с визуализацией процесса выделения памяти и размещения объектов. Помню, на втором курсе получил самоэкзамен за подобную разработку (но только на object pascal).
https://habr.com/ru/companies/ntechlab/articles/946098/ #python
Статья ещё хороша тем, что есть приложение на PyQt5 с визуализацией процесса выделения памяти и размещения объектов. Помню, на втором курсе получил самоэкзамен за подобную разработку (но только на object pascal).
https://habr.com/ru/companies/ntechlab/articles/946098/ #python
Хабр
Визуализация управления памятью в Python: что творится внутри?
Python щедро раздаёт нам удобные абстракции. Создаёшь список, словарь или строку — и не думаешь, где под это выделилась память и как она потом освободится. Но внутри интерпретатора работает довольно...
🔥3❤2
Довольно частая задача - отправить 100500 http-запросов в какой-нибудь сервис. Тут на примере небольшого приложения показаны примитивы синхронизации, а также важные вещи типа повторов и таймаутов. Плюс в комментах ещё идей накидали.
https://habr.com/ru/articles/963880/ #python
https://habr.com/ru/articles/963880/ #python
Хабр
Как не положить API: rate limiting в Python
Привет! Предыстория Была у меня задача: проверить качество работы API для поиска похожих векторов. Штука довольно стандартная для ML-систем — на вход подаёшь 128-мерный вектор (например, эмбеддинг...
👍1🔥1
В последнее время часто встречаю упоминание новой библиотеки логирования loguru. Я, конечно, рад ещё одному инструменту, но зачем? У нас уже есть structlog, если нужен подробный и красивый вывод в консоль; json_log_formatter, если нужно только форматирование в json; да и стандартный логгер не так уж плох, если в нём разобраться.
И скорее всего я не буду использовать loguru. Это внешная зависимость, которой не будет на 98% проектах. Она, конечно, красивая, но как-нибудь обойдусь. Лучше инвестировать время в изучение каких-то базовых вещей — например, logging. Он есть везде, концепций не так много, но их достаточно для гибкости. Написать свой логгер не так чтобы сложно... А плюсом вы получите понимание работы логирования и в другом языке. Никогда не задумывались почему в пакете logging функции записаны в camelCase? 😉
https://habr.com/ru/articles/966048/ #python
И скорее всего я не буду использовать loguru. Это внешная зависимость, которой не будет на 98% проектах. Она, конечно, красивая, но как-нибудь обойдусь. Лучше инвестировать время в изучение каких-то базовых вещей — например, logging. Он есть везде, концепций не так много, но их достаточно для гибкости. Написать свой логгер не так чтобы сложно... А плюсом вы получите понимание работы логирования и в другом языке. Никогда не задумывались почему в пакете logging функции записаны в camelCase? 😉
https://habr.com/ru/articles/966048/ #python
Хабр
Забудьте про print(): Современное и красивое логирование в Python с помощью Loguru
Введение: Боль и страдания от print() и стандартного logging Если вы пишете на Python, скорее всего, ваша карьера разработчика начиналась с одной простой, но незаменимой команды — print() . Нужно...
❤4
adamj.eu
Django: what’s new in 6.0 - Adam Johnson
Django 6.0 was released today, starting another release cycle for the loved and long-lived Python web framework (now 20 years old!). It comes with a mosaic of new features, contributed to by many, some of which I am happy to have helped with. Below is my…
А тем временем вышла новая мажорная версия Django. У меня к этому фреймворку давняя любовь; я умею его готовить и надеюсь к нему вернуться :)
Заметил, что он вобрал в себя много сторонних пакетов, которые доказали свою полезность. Итак, из интересного:
- выполнение отложенных задач
- улучшение Content Security Policy
- автоимпорт пакетов в
- встроенный тип поля модели StringAgg
Интересный получился релиз. И если хочется поиграться с отложенными задачами, то вот подробная инструкция. Главное, разделяйте рантайм и фоновую нагрзуки, чтобы работа в фоне не аффектила запросы пользователей.
UPD. Нашёл перевод
https://adamj.eu/tech/2025/12/03/django-whats-new-6.0/ #python
Заметил, что он вобрал в себя много сторонних пакетов, которые доказали свою полезность. Итак, из интересного:
- выполнение отложенных задач
- улучшение Content Security Policy
- автоимпорт пакетов в
./manage.py shell- встроенный тип поля модели StringAgg
Интересный получился релиз. И если хочется поиграться с отложенными задачами, то вот подробная инструкция. Главное, разделяйте рантайм и фоновую нагрзуки, чтобы работа в фоне не аффектила запросы пользователей.
UPD. Нашёл перевод
https://adamj.eu/tech/2025/12/03/django-whats-new-6.0/ #python
❤2👍2🔥1
Не так всё однозначно ©️
Подоспел очередной бенчмарк версий CPython (3.10 - 3.14). В целом, конечно, производительность улучшилась, но есть и деградация. Например, pickle/unpickle (что может быть важно для ML), работа с json и корутинами.
https://en.lewoniewski.info/2025/python-314-vs-313-312-311-310-performance-testing-video/ #python
Подоспел очередной бенчмарк версий CPython (3.10 - 3.14). В целом, конечно, производительность улучшилась, но есть и деградация. Например, pickle/unpickle (что может быть важно для ML), работа с json и корутинами.
https://en.lewoniewski.info/2025/python-314-vs-313-312-311-310-performance-testing-video/ #python
Lewoniewski
Python 3.14 vs 3.13 / 3.12 / 3.11 / 3.10 - performance testing (video)
In this article, the performance test results of Python version 3.14 are presented and compared with the results obtained for earlier releases — 3.13, 3.12, 3.11, and 3.10. A total of over 100 diverse benchmark tests were conducted, covering both computational…
👍3❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Что-то за последнюю неделю было много задач по профилированию python приложений. Делюсь тем, что раскопал.
1. Профилировку по памяти удобней всего делать через memray. Всего
2. В 3.15 обещают завезти сэмплирующий профайлер Tachyon. Он будет уметь цепляться к работающему процессу
3. Но до 3.15 ещё дожить надо 😕 Так что воспользовался библиотекой tprof, которая умеет профилировать не всю программу, а только заданные функции. Удобно в коде держать и старую, и новую и итеративно оптимизировать.
4. Не забываем про классику py-spy, хотя её вывод для меня показался сложноватым.
Получился вот такой краткий обзор современных профилировщиков :) А если захотите написать свой, то вот статейка как они работают под капотом.
#python
1. Профилировку по памяти удобней всего делать через memray. Всего
python3 -m memray run example.py, а потом memray flamegraph memray-example.py.11235.bin. А он сам строит красивые графички, таблицы и пр. Умеет также цепляться к работающему процессу. Прям настоятельно рекомендую - после всех предыдущих оставил приятное впечатление.2. В 3.15 обещают завезти сэмплирующий профайлер Tachyon. Он будет уметь цепляться к работающему процессу
python -m profiling.sampling attach --subprocesses 12345, замерять разные тайминги (CPU, GIL, exception), что более чем хватило бы для решения большинства задач. Интерактивный пример результата. А ещё он умеет красиво выводить в real-time в терминал (см gif). Правда, не знаю зачем это может пригодится. Но красивое.3. Но до 3.15 ещё дожить надо 😕 Так что воспользовался библиотекой tprof, которая умеет профилировать не всю программу, а только заданные функции. Удобно в коде держать и старую, и новую и итеративно оптимизировать.
4. Не забываем про классику py-spy, хотя её вывод для меня показался сложноватым.
Получился вот такой краткий обзор современных профилировщиков :) А если захотите написать свой, то вот статейка как они работают под капотом.
#python
👍9❤4🔥2