Python Glossary English

Python 3.4+Асинхронное программированиепонятие

asyncio.AbstractEventLoop

event loop

Абстрактный базовый класс цикла событий: описывает, что умеет любой event loop asyncio — планировать вызовы, следить за сокетами, запускать процессы.

Синтаксис

loop = asyncio.get_running_loop()  # isinstance(loop, asyncio.AbstractEventLoop)

Учащемуся он почти никогда не нужен: программа целиком запускается через asyncio.run(), а задачи создаются asyncio.create_task(), и цикл остаётся за кадром. Объект цикла достают только ради редких методов — loop.run_in_executor() (увести блокирующий вызов в поток) или loop.time(), — и берут его asyncio.get_running_loop() внутри корутины, а не asyncio.get_event_loop(), который вне цикла ведёт себя по-разному в разных версиях. Наследоваться от AbstractEventLoop имеет смысл только автору собственного цикла вроде uvloop.

Примеры

import asyncio
import time
def blocking():
    time.sleep(0.01)  # обычная блокирующая функция
    return 'готово'
async def main():
    loop = asyncio.get_running_loop()
    print(isinstance(loop, asyncio.AbstractEventLoop))  # → True
    result = await loop.run_in_executor(None, blocking)  # в пуле потоков, цикл не стоит
    print(result)  # → готово
asyncio.run(main())

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности