@Hikanosu

AIOgram, как лучше обновить код рассылки, чтобы она не останавливалась из-за Flood control?

Изначально написал код для рассылки, но даже при маленьком количестве пользователей в рассылке, она останавливалась из-за Flood control. Переписал рассылку следующем образом и увеличил time out между сообщениями:
...
            for user in row:
                try:
                    await bot.send_message(chat_id=user[0], text=data['mailing_text'])
                except:
                time.sleep(0.1)
       ...

И этого хватило на некоторый промежуток времени. Но когда в рассылке стало больше 3000 человек, появилась новая проблема:
Flood control exceeded. Retry in n seconds.

Достаточно ли будет просто увеличить time out между сообщениями, чтобы избавиться от этой ошибки? Или есть лучшие способы исправления?
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
shurshur
@shurshur
Не надо использовать time.sleep в асинхронном коде, это блокирует event loop! Вместо этого надо использовать асинхронный вариант asyncio.sleep.

По существу с таким кодом будет делаться 10 отправок в секунду, а официально лимит 30 в секунду. Но лучше бы дополнительно отлавливать исключение с flood control и по нему делать дополнительный sleep хотя бы на 1 секунду, а то и чуть больше, чтобы счётчик числа попыток на стороне Telegram обнулился за это время.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы