@bifronte
учусь

Как запусить две функции асинхронно?

Добрый день, пытаюсь запустить две функции:
async def main():
    await send()
    await dp.start_polling(bot)

asyncio.run(main())

Функция send() представляет собой async функцию с бесконечным циклом:
async def send():
    while True:
        await asyncio.sleep(1)
        now = datetime.now()
        current_time = now.strftime("%S")
        if current_time == '30':
            # дальше просто функция

По неизвестной для меня причине запускается только одна из функций, хотя они вроде обе асинхронные. Как мне запустить обе функции?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 2
shurshur
@shurshur
Сисадмин, просто сисадмин...
Всё так и должно быть, ведь await означает ожидание завершения функции и получения её результата, вторая не будет запущена до этого.

Можно например так:

send_result = send()
polling_result = dp.start_polling(bot)
await send_result
await polling_result


Или так:

send_result = send()
polling_result = dp.start_polling(bot)
await asyncio.gather(send_result, polling_result)


Или даже так:

await asyncio.gather(
     send(),
     dp.start_polling(bot)
)
Ответ написан
Комментировать
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Потому что await, как следует из названия, асинхронно ожидает. Используйте create_task или gather.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
27 апр. 2024, в 13:49
300000 руб./за проект
27 апр. 2024, в 13:30
30000 руб./за проект
27 апр. 2024, в 13:22
600 руб./за проект