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Сообщить о неточности