В стандартную библиотеку Python 3.4 когда-то входил модуль асинхронный , что позволило удобно и быстро писать асинхронный код. А теперь о синтаксисе Python 3.5. были Были добавлены конструкции async/await, окончательно формализовавшие асинхронность «из коробки» как красивую и гармоничную часть языка.
Хотя сам asyncio позволяет писать высоконагруженные веб-приложения, оптимизация производительности не была приоритетом при создании модуля.
Один из авторов упомянутого PEP-492 (async/await) Юрий Селиванов (на Хабре — 1-й1 , его твиттер ) взял на себя задачу разработать альтернативную реализацию цикла событий для asyncio — увлуп .
Вчера вышла первая альфа-версия модуля, о чем писал автор расширенный пост .
Короче говоря, uvloop работает примерно в 2 раза быстрее, чем Node.js, и почти не уступает программам на Go.
Применение
uvloop написан на Cython и построен поверх Либув .Установить модуль можно стандартно (Windows на данный момент не поддерживается):
Также не сложно использовать:pip install uvloop
import asyncio
import uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
Теперь любой вызов asyncio.get_event_loop() вернет экземпляр uvloop.
Производительность
Подробнее о бенчмарках (методологии и выводах) можно прочитать здесь.в оригинале , ниже приведены только окончательные графики.
Результаты для простых TCP-запросов разного размера:
HTTP-запросы:
Теги: #python3 #asyncio #uvloop #асинхронное программирование #Высокая производительность #python
-
Эволюция Гоночных Игр, Часть 3
19 Oct, 24 -
Скулэтчер
19 Oct, 24 -
Тенденции Поиска На Euronews
19 Oct, 24 -
Крючок Заведомо Устаревших Вещей
19 Oct, 24 -
Опубликован Перевод Документации Selenium
19 Oct, 24