Функции и методы event loop

При разработке парсеров вам не понадобится использовать дополнительные методы event loop, они предназначены для разработчиков библиотек и фреймворков, для которых нужен более тонкий контроль над поведением цикла. Но я считаю, что нужно иметь общее представление о его возможностях. Ниже перечислены основные методы, которые могут быть полезны при дальнейшем изучении асинхронного программирования.

В курсе мы будем использовать определенные функции модуля asyncio, их мы будем обсуждать в разделе «Основные методы и функции asyncio». При разработке парсеров мы будем использовать синтаксис asyncio.run() без создания экземпляра класса. asyncio.  — вызов функции у asyncio означает, что мы вызываем ее непосредственно у цикла событий. Одновременно может быть запущен только один цикл событий, по этой причине вызов функций asyncio может быть выполнен из любого места в программе, все вызываемые функции и методы будут применяться к текущему циклу событий.

asyncio.run(coroutine) — создает новый event loop и запускает переданную в него сопрограмму. После исполнения сопрограммы закрывает цикл событий. В вашей программе может быть только один event loop в одном потоке.

asyncio.get_running_loop() — возвращает текущий запущенный цикл событий, можно вызывать только из асинхронной функции, вызов вне сопрограммы вызовет ошибку. К переменной running_loop мы можем применять те же самые методы и функции, что и к event loop, потому что это одна и та же сущность. Вы же помните, что в одном потоке может быть только один цикл событий?

import asyncio

async def main():
    await asyncio.sleep(1)
    running_loop = asyncio.get_running_loop()
    print(running_loop)
asyncio.run(main())

результат:

<ProactorEventLoop running=True closed=False debug=False>

asyncio.get_event_loop() — получить текущий цикл событий.  Если в текущем потоке цикл событий не установлен функцией set_event_loop(), то основной поток в вашей ОС и будет считаться основным. Asyncio за нас создаст и установит цикл событий по умолчанию. Не рекомендуется использовать эту функцию, т.к. ее поведение считается сложным в связи с использованием политик windows. Предпочтительнее использовать get_running_loop().

asyncio.set_event_loop(event_loop) — устанавливает переданный в эту функцию цикл как цикл по умолчанию для этого потока.

asyncio.new_event_loop() — создает и возвращает новый объект цикла событий.

Следующие операции проводятся с объектом цикла событий:

loop = asyncio.get_running_loop()

loop.stop() — останавливает цикл событий.

loop.is_running() — возвращает True, если цикл событий в настоящее время выполняется.

loop.is_closed() — возвращает True, если цикл событий был закрыт.

loop.close() — закрывает текущий цикл событий.

Во время закрытия цикл не должен быть запущен, иначе произойдет остановка всех выполняющихся сопрограмм и ожидаемых объектов.

Остальные функции и методы доступны по ссылке — https://docs.python.org/3/library/asyncio-eventloop.html



Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: