@OlegUnity

Как запустить задачу из бота aiogram python?

Смысл в том, что он будет работать при выполнении других задач.
import asyncio
from datetime import datetime
from aiogram import Bot, Dispatcher, executor, types

API_TOKEN = ''

bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)




@dp.message_handler(content_types=['text'])
async def text(message: types.Message):
  if message.text == 'a':
    print(await periodic())
  if message.text == 'b':
    print('da')

async def periodic():
    for i in range(99999):
       pass
    return await 12


if __name__ == '__main__':
    executor.start_polling(dp)

Когда бот пишет а, он запускает скрипт, но когда он сразу же пишет б, он не отвечает. Смысл вопроса состоит в том, чтобы понять, как запустить асинхронный поток из потока.
  • Вопрос задан
  • 1929 просмотров
Решения вопроса 1
bot = Bot(token=API_TOKEN)
loop = asyncio.get_event_loop()  # В Python 3.7:  asyncio.get_running_loop()
dp = Dispatcher(bot, loop=loop)

if message.text == 'a':
    dp.loop.create_task(periodic()) # создаем задачу асинхронно и НЕ дожидаемся ее выполнения (await)
    print("I'm working hard")

async def periodic():
    time.sleep(5) # Delay for 5 seconds.

С Питоном только начинаю знакомиться, так что могу ошибаться.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Как-то так:

async def main():
  polling_task = asyncio.create_task(dp.start_polling())
  ... прочие действия...

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Ответ написан
Ваш ответ на вопрос

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

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