Фёдор Борщёв

python-telegram-bot как пример продуктовой ошибки

Создатели опенсорс-инструментов совершают продуктовые ошибки ещё чаще, чем предприниматели.

Каноничный пример — python-telegram-bot. Хороший, вроде бы, фреймворк: приемлемый бойлерплейт, поддерживает все нужные эндроинты, в документации разобраться тоже возможно.

Но вот несколько лет назад его взяли и переписали на asyncio. Получилось очень по-программистски: авторы не надели шляпу пользователей, у которых уже есть кодовая база. Хочешь новые фичи и секьюрити-фиксы — будь добр, переписывай кодовую базу под никому не нужный async. Авторы даже не удосужились как-то продать юзерам ценность перехода, добавить хоть каких-то фич. Просто переписали и всё — в анонсе нет вообще ни капли смысла, одни только «embracing the future».

Оно и понятно — откуда взяться смыслу, если у PTB в принципе не может быть задач, для которых нужен event loop. Если есть большая нагрузка, как, к примеру, у антиспам-ботов, то её легче обработать без фреймворка, в рамках отдельного потока. А если нужно дизайнить развесистый флоу общения с пользователем (для чего вобщем-то и нужен PTB) — скорее всего этот флоу никогда не нагрузят так, что там понадобится асинхронщина.

Самое смешное в этом переходе — фреймворк даже на asyncio продолжает быть однозадачным: не будет отвечать одному юзеру, пока обслуживает другого. Чтобы включить интуитивно ожидаемое поведение, надо в бойлерплейте писать какое-то странное заклинание, что-то вроде bot.init(simultaneos_updates=True).