При разработке парсеров вам не понадобится использовать дополнительные методы 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