Задать вопрос
@zlodiak

Почему не срабатывает await?

Есть такой код:

async def callee():
    print('Hello')

async def caller():
    await callee()
    print('World')

caller()


В функции caller есть await, который приостанавливает её выполнение до того момента как выполнится функция calee. Но после запуска этого скрипта консоль выводит следующее сообщение об ошибке:

(asyncio) md@md ~/.MINT18/code/python/asyncio $ python index.py
index.py:8: RuntimeWarning: coroutine 'caller' was never awaited
caller()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback


В котором говорится, что функция caller не дождалась выполнения caller. Помогите пожалуйста понять проблему и исправить скрипт
  • Вопрос задан
  • 6833 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
asyncio.run(caller())
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
monester
@monester
DevOps/Python engineer
Все короутины (функции использующие async/await) должны выполняться в eventloop. Именно это и указано в варнинге, что eventloop не был запущен и короутина не была вызвана.

Запуск короутины можно сделать так:
asyncio.run(caller())

Этот вызов нужно сделать для основной функции где находятся все асинхронные вызовы.
Ответ написан
Комментировать
@MasterCard000
Я так понимаю вы забыли библиотеку импортировать

import asyncio

async def callee():
    print('Hello')

async def caller():
    await callee()
    print('World')

if __name__ == '__main__':
    asyncio.run(caller())


5e1521adbe673666227516.png
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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