💡 Предложения в Open source
Я хочу быть полезным сообществу и предлагать свои улучшения для инструментов, которыми пользуюсь сам 😊.
Kafka-python
В одном проекте возникла необходимость избавиться от ребалансов консьюмеров Кафки, чтобы обеспечить постоянное чтение из топиков. Однако, ни одна из популярных клиентских библиотек (kafka-python, confluent-kafka, pykafka) не предлагала такой функциональности, несмотря на то, что она была реализована уже в 2.3.0 версии брокера. Сначала я реализовал эту фичу, доработав KafkaConsumer в репозитории проекта, а затем оформил всё Pull request‘ом. К сожалению, проект сейчас уже практически заброшен.
Django extensions
При работе над большим количеством новых фич, я часто сталкивался с ситуацией, когда приходится переключаться между ветками, откатывать миграции одной ветки и применять миграции другой. Пока вы работаете в одном Django app, никаких проблем не возникает. Но когда миграции затрагивают несколько Django-приложений, откат каждого приложения становится неприятной рутиной.
Я написал Django-команду, которая фиксирует состояние миграций в текущей ветке в файл и позволяет легко переключаться между ветками.
Jaeger client
Jaeger - отличный инструмент для трассировки кода. Но однажды у меня возникла необходимость его более гибкой настройки, которую конфигурация клиентской библиотеки сделать не позволяла. Я предложил применить внедрение зависимостей в класс конфигурации.
📂 Мои проекты
Relatives
Сервис для построения фамильного древа.
Я давно хотел заняться фамильным древом, но не находил для этого подходящих свободных инструментов, а те, что были, не удовлетворяли моим требованиям. И я решил изобрести свой велосипед. А заодно использовать для этого какие-то современные технологии, чтобы лучше с ними разобраться. Поэтому выбор пал на FastAPI с асинхронным ORM, хотя не скрою, они здесь абсолютно неуместны, и тот же Django подошёл бы куда лучше.
FastAPI
Ormar
Asyncio
Aiofutures
Библиотека для замены многопоточного executor’а асинхронным, опубликована в PyPI.
В одном из проектов я столкнулся с ограничениями всеми известного GIL из-за обширного HTTP взаимодействия в приложении.
Таймауты на HTTP-запросы отрабатывают некорректно из-за большого количество потоков ОС и переключения контекста.
Я принял решение вынести всё HTTP-взаимодействие в отдельный поток, который будет выполнять запросы асинхронно. Количество
потоков в приложении сократилось с 24-25 до 10, таймауты стали работать корректно, потребление ресурсов значительно снизилось.
Тем самым была также заложена основа для переписывания приложения на асинхронный стиль.
Python
asyncio
Dynamic-sitemap
Библиотека для генерации карты сайта, опубликована в PyPI, а документация размещена на readthedocs.
Изначально, мне требовалось только добавить sitemap в мой проект блога на Flask. Однако после того, как я не нашёл более-менее привлекательной альтернативы, я решил написать свою библиотеку, а заодно научиться размещать их в python package index. Затем решил использовать её ещё и для изучения различных инструментов, например, Sphinx.
Python
Sphinx