Сообщить об ошибке.

Функция run() модуля asyncio в Python.

Функция asyncio.run() запускает цикл событий в асинхронном коде.

Синтаксис:

import asyncio

asyncio.run(coro, *, debug=False)

Параметры:

  • coro - точка входа в асинхронную программу,
  • debug=False - включение отладчика.

Возвращаемое значение:

  • результат работы программы.

Описание:

Функция run() модуля asyncio выполнит сопрограмму coro и вернет результат ее работы.

Функция asyncio.run() создает новый цикл событий, запускает переданную сопрограмму coro и в конце закрывает цикл событий. Если в программе используются асинхронные генераторы или пул потоков, то функция завершит их работу.

Функция asyncio.run() не может быть вызвана, когда другой цикл событий asyncio выполняется в том же потоке.

Если аргумент debug=True, то цикл событий будет запущен в режиме отладки.

Функция asyncio.run() всегда создает новый цикл событий и в конце его закрывает. Её следует использовать в качестве основной точки входа для программ с использованием модуля asyncio, а в идеале функцию asyncio.run() следует вызывать только один раз.

Новое в Python 3.7

Примеры запуска асинхронных программ:

В примере, сопрограмма loop.getnameinfo() (асинхронный вариант функции socket.getnameinfo()) конвертирует IP-адрес в имя хоста и номер порта в имя протокола, где это возможно.

import asyncio

async def get_name():
    TARGETS = [
        ('8.8.8.8', 443),
        ('1.1.1.1', 443),
        ('8.8.4.4', 443),
        ('77.88.8.8', 443),
        ('77.88.8.88', 443),
        ('77.88.8.7', 443)
    ]
    
    # получаем текущий цикл событий
    loop = asyncio.get_event_loop()
    
    for target in TARGETS:
        # запускаем асинхронный вариант 
        # функции socket.getnameinfo()
        host, port = await loop.getnameinfo(target)
        # выводим результаты
        print(f'{target[0]:15}: {host}')

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

# 8.8.8.8        : dns.google
# 1.1.1.1        : one.one.one.one
# 8.8.4.4        : dns.google
# 77.88.8.8      : dns.yandex.ru
# 77.88.8.88     : safe.dns.yandex.ru
# 77.88.8.7      : family.dns.yandex.ru

Исходный код функции asyncio.run() можно найти в /python/lib/asyncio/runners.py.