Как стать автором
Обновить

Вышел uvloop — продвинутая реализация цикла событий для asyncio в Python

Время на прочтение 1 мин
Количество просмотров 43K
В стандартной библиотеке Python 3.4 в своё время появился модуль asyncio, позволивший удобно и быстро писать асинхронный код. А уже к Python 3.5 в синтаксис были добавлены конструкции async/await, окончательно оформившие асинхронность «из коробки» как красивую и гармоничную часть языка.



Хотя asyncio сам по себе и позволяет писать высоконагруженные веб-приложения, оптимизация производительности не была приоритетом при создании модуля.

Один из авторов упомянутого PEP-492 (async/await) Юрий Селиванов (на Хабре — 1st1, его твиттер) взялся за разработку альтернативной реализации цикла событий для asyncio — uvloop. Вчера вышла первая альфа-версия модуля, о чём автор написал развёрнутый пост.

Если вкратце, то uvloop работает примерно в 2 раза быстрее Node.js и практически не уступает программам на Go.

Использование


uvloop написан на Cython и построен на базе libuv.

Установить модуль можно стандартно (Windows в данный момент не поддерживается):

pip install uvloop


Использовать тоже не сложно:

import asyncio
import uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())


Теперь любой вызов asyncio.get_event_loop() будет возвращать экземпляр uvloop.

Производительность


Подробнее про бенчмарки (методику проведения и выводы) можно почитать в оригинале, ниже только итоговые графики.

Результаты для простых TCP запросов разного размера:

image

HTTP запросы:

image
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+30
Комментарии 60
Комментарии Комментарии 60

Публикации

Истории

Работа

Python разработчик
136 вакансий
Data Scientist
66 вакансий

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн