@Herben

Как запустить асинхронную функцию параллельно теллеграм боту?

Есть асинхронный телеграм бот на pyTelegramBotAPI библиотеке, бот отвечает только когда пользователь пишет - например, пользователь пишет "погода" и он сразу же получает прогноз погоды. Я решил добавить авто-проверку погоды, чтобы бот, сам обнаружив низкую температуру, сообщил об этом пользователю. Вроде легко, думал я...

Я пробовал много способов, как это реализовать... Тупо 2 скрипт запустить, но телеграм выдаёт ошибку, что сессия уже используется 1 скриптом; потом сделать функцию (позаимствовал решение тут), которую пользователь запускал вручную в боте - await weather_check(), но она дублировалась, и переписка превращалась в спам-месиво.

И наконец, я просто запустил эту функцию через asyncio.run всё получилось, думал я - бот автоматически обо всём пишет. Но из-за этого, любые команды или сообщения он игнорит. Что я делаю не так или как реализовать это?

async def weather_check():
    while True:
        # Тело функции
        await asyncio.sleep(5) # Ожидание перед повторной проверкой

asyncio.run(weather_check())

Эта часть зацикливала функцию для варианта, где пользователь сам её вызывает. Почему она изначально по запуску скрипта этого не делала, я не знаю.
if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.create_task(weather_check())


Простите, если тупой вопрос
За ранее спасибо
  • Вопрос задан
  • 679 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
asyncio.create_task()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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