@FictionBender

Как запустить асинхронную функцию aiogram?

Всем привет. Есть 3 .py файла:
aio.py (telegram bot)
file1.py (функция 1 в бесконечном цикле)
file2.py (функция 2 в бесконечном цикле)

Код aio.py
from aiogram import Bot, Dispatcher, executor, types
import asyncio
import file1
import file2

bot = Bot(token='123')
dp = Dispatcher(bot, loop=asyncio.get_event_loop())

#Хэндлеры сообщений

executor.start_polling(dp, skip_updates=True, on_startup=on_startup())


Код file1

import asyncio

async def test():
     while True:
           print('1')
           await asyncio.sleep(1)


Примерно тот же код в File2.

Как мне запустить эти две функции из двух файлов асинхронно телеграм боту?
Слышал про on_startup в aiogram, но не могу понять, как им пользоваться :(

Если запускаю просто через asyncio.run(file1.test()), то функция работает, но сам телеграм бот перестает отвечать.
  • Вопрос задан
  • 1330 просмотров
Пригласить эксперта
Ответы на вопрос 1
gnifajio
@gnifajio
Совершенствуюсь каждый день
Вы можете запустить ваши функции в отдельных потоках с помощью модуля threading.

Пример:

import threading
import file1
import file2

def run_in_thread(func):
    def wrapper(*args, **kwargs):
        thread = threading.Thread(target=func, args=args, kwargs=kwargs)
        thread.start()
    return wrapper

@run_in_thread
def run_function_1():
    file1.test()

@run_in_thread
def run_function_2():
    file2.test()

def on_startup():
    run_function_1()
    run_function_2()

executor.start_polling(dp, skip_updates=True, on_startup=on_startup)


Таким образом, вы можете запустить ваши функции из двух разных файлов в отдельных потоках, а телеграм бот продолжит работу нормально.

Обратите внимание, что этот код также требует обертку run_in_thread, чтобы запускать функции в отдельных потоках.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы