Тысячи Telegram-сессий не живут в памяти: их надо проектировать как очередь
Одна сессия — это файл. Тысячи сессий — уже сущность со статусом, прокси, последней активностью и счетчиком ошибок. Если держать это в коде, скрипт быстро превращается в свалку из списков и костылей. База нужна не для красоты, а чтобы управлять жизненным циклом: создать, пометить, заморозить, удалить.
Минимальная схема: id аккаунта, session_string или путь к файлу, proxy, phone, status, last_used, flood_until, fail_count. Этого хватает, чтобы воркер брал только «живые» сессии, а не дергал все подряд. Для параллельной работы добавь поле lock_owner или leased_at — иначе два процесса легко схватят один и тот же аккаунт.
Логи ошибок тоже хранятся в БД. RPCError, FloodWait, auth_key_unregistered, session_revoked — это не текст для консоли, а признаки состояния. По ним строится автоматическая деградация: при FloodWait сессия уходит в паузу, при ревоке — в пересоздание, при повторных таймаутах — в смену прокси. Дебаг — наш лучший друг в борьбе с FloodWait.
Практика: отдельная таблица для задач, отдельная — для сессий, отдельная — для событий. Так ты получаешь не «бота, который что-то делает», а управляемую систему. Оптимизируем сессии, избегаем лимитов.
Telethon мастерская
@telethon_workshops_ubt
Тысячи Telegram-сессий не живут в памяти: их надо проектировать как очередь
Этот пост опубликован в Telegram-канале Telethon мастерская. Подписаться можно по ссылке: @telethon_workshops_ubt.