- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

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

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

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

pip install uvloop

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

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

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

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

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

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

image

HTTP запросы:

image

Автор: veveve

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/119973

Ссылки в тексте:

[1] asyncio: https://docs.python.org/3/library/asyncio.html

[2] были: https://www.python.org/dev/peps/pep-0492/

[3] Юрий Селиванов: https://twitter.com/1st1

[4] uvloop: https://github.com/MagicStack/uvloop

[5] развёрнутый пост: http://magic.io/blog/uvloop-make-python-networking-great-again/

[6] libuv: http://libuv.org/

[7] Источник: https://habrahabr.ru/post/282972/