Как выполнять функцию каждые 5 секунд в боте
У меня есть некая функция, которая проверяет, есть ли машины которым нужно заменить топливо. Если такие авто есть, отправляет сообщение пользователю в telegram. Я хочу, чтобы функция срабатывала каждые 5 секунд, при этом не мешая aiogram start polling.
Вот код, который нашел в интернете, но он не работает:
from aiogram import Bot, Dispatcher, executor, types
from asyncio import create_task, sleep, get_event_loop
from handlers.admin import check_oil_change
from config import TOKEN
# =========== base variables =============
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
# ========== handlers ============
...
# ============ polling ==============
async def main():
create_task(executor.start_polling(dp))
while True:
await sleep(5)
await check_oil_change(bot)
loop = get_event_loop()
if __name__ == '__main__':
loop.run_until_complete(main())
loop.close()
aiogram 2.25.2
Ответы (2 шт):
Автор решения: DG 2626
→ Ссылка
Могу предложить простое, но наверное не лучшее решение - сделать проверку топлива отдельным .py файлом. Создать инстанс бота и отправлять сообщения можно из разных источников. Нельзя проверять наличие новых сообщений одновременно из нескольких инстансов
Автор решения: Сергей Ш
→ Ссылка
from aiogram import Bot, Dispatcher, executor, types
from asyncio import create_task, sleep
from handlers.admin import check_oil_change
from config import TOKEN
# =========== base variables =============
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
# ========== handlers ============
...
# ============ polling ==============
async def main():
while True:
await sleep(5)
await check_oil_change(bot)
async def on_startup(_):
create_task( main())
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True, on_startup=on_startup)
или тут ищите