ввиду вместо того, чтобы ловить исключения, иметь некоторый буфер со счётчиками, который помимо предупреждений мог бы автоматически отложить отправку запроса?
нет, я хотел такое сделать, но...
но... что тебя остановило?
Не доверяю чужому коду
В целом, с ходу приходит идея оборачивать все вызовы на отправку в некоторую очередь, на том же редисе например... И там уже нормально с фильтрами и прочими ухищрениями управлять лимитами.
Я такое начинал делать но потом понял что это говно, так как нам зачастую нужно не просто отправить сообщение а и получить результат отправки в хендлере и сделать что-то после отправки. И при перезапуске бота это никак нормально не сделать с обычной очередью на отправку сообщений без потери контекста что должен выполнится после отправки.
Ну и вторая проблема: лимиты нигде нормально не описаны
Не очень понял проблему. У нас есть корневой метод отправки любых запросов к телеге. Кидаем его в декоратор через прямой синтаксис, данные - в редис, дальше очередь фильтрует.
Например после отправки ты в хендлере хочешь записать айдишник отправленого сообщения в бд/ещё куда нибудь, сделать ещё что-то. Кинул ты в очередь сообщение, перезапустил бота, всё теперь тот код что должен был исполнен после отправки в хендлере не сработает и айдишник сообщения не будет записан в бд.
В крайнем случае приделать какой-нибудь wait_for_close() метод. Но это скорее хреновый вариант
Надо просто сериализовать стейт корутин и восстанавливать их из очереди
Не проще ретраи со слипом сделать?
Я так и делаю. Пока что.
try: except: retry(func, *args, **kwargs) ?
Да проще декоратором.
Жди что от ретраев у тебя начнется лавина
Да я понимаю что говно какое-то. Вот и думаю над решением.
Забить уже предлагали?
def make_something(state="zabey"...): Забить всегда можно
Не Стейт, а стратегия
Обсуждают сегодня