- PVSM.RU - https://www.pvsm.ru -
В стандартной библиотеке Python 3.4 в своё время появился модуль asyncio [1], позволивший удобно и быстро писать асинхронный код. А уже к Python 3.5 в синтаксис были [2] добавлены конструкции async/await, окончательно оформившие асинхронность «из коробки» как красивую и гармоничную часть языка.
Хотя 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 запросов разного размера:
HTTP запросы:
Автор: 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/
Нажмите здесь для печати.