@vante_scribaxxi

Как в telegram боте совершать определенное действие каждые несколько часов?

Пишу бота на python aiogram (асинхронный бот). Нужно чтобы бот каждые 2 часа обновлял прайс.
Думаю сделать свой loop и передать его при запуске бота, предварительно как-то добавив задачу в него, а в ней поставить бесконечный цикл с таймером.
Но тогда наверное возможны проблемы с доступом к данным к которым последует одновременный запрос на чтение и запись. Да уж намудрил))
  • Вопрос задан
  • 6583 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
import asyncio

from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor

DELAY = 7200

bot = Bot(token='BOT TOKEN HERE')
dp = Dispatcher(bot)

@dp.message_handler(commands=['start', 'help'])
async def send_welcome(message: types.Message):
    await message.reply("Hi!\nI'm EchoBot!\nPowered by aiogram.")


async def update_price():
    ...


def repeat(coro, loop):
    asyncio.ensure_future(coro(), loop=loop)
    loop.call_later(DELAY, repeat, coro, loop)


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.call_later(DELAY, repeat, update_price, loop)
    executor.start_polling(dp, loop=loop)

Естественно, стоит позаботиться о том, чтобы внутри update_price не вызывались блокирующие операции.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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