uvloop — это быстрая замена встроенного цикла событий asyncio. uvloop реализован на Cython и использует libuv под капотом.
Документацию проекта можно найти здесь. Пожалуйста, также проверьте вики.
uvloop ускоряет asyncio в 2-4 раза.
На приведенной выше диаграмме показана производительность эхо-сервера с различными размерами сообщений. В тесте сокетов используются loop.sock_recv()
loop.sock_sendall()
; тест потоков использует потоки высокого уровня asyncio, созданные функцией asyncio.start_server()
; а тест протокола использует loop.create_server()
с простым протоколом эха. Подробнее об uvloop читайте в блоге.
uvloop требует Python 3.8 или более поздней версии и доступен на PyPI. Используйте pip для его установки:
$ pip установить uvloop
Обратите внимание, что настоятельно рекомендуется обновить pip перед установкой uvloop с помощью:
$ пип установить -U пип
Начиная с версии uvloop 0.18, предпочтительным способом его использования является использование вспомогательной функции uvloop.run()
:
import uvloop
async def main ():
# Main entry-point.
...
uvloop . run ( main ())
uvloop.run()
работает, просто настраивая asyncio.run()
для использования uvloop, передавая ему все аргументы, такие как debug
, например uvloop.run(main(), debug=True)
.
В Python 3.11 и более ранних версиях можно использовать следующий альтернативный фрагмент:
import asyncio
import sys
import uvloop
async def main ():
# Main entry-point.
...
if sys . version_info >= ( 3 , 11 ):
with asyncio . Runner ( loop_factory = uvloop . new_event_loop ) as runner :
runner . run ( main ())
else :
uvloop . install ()
asyncio . run ( main ())
Для сборки uvloop вам понадобится Python 3.8 или новее:
Клонируем репозиторий:
$ git clone --recursive [email protected]:MagicStack/uvloop.git $ cd увлуп
Создайте виртуальную среду и активируйте ее:
$ python3 -m venv uvloop-dev $ источник uvloop-dev/bin/activate
Установите зависимости разработки:
$ pip install -e .[dev]
Создайте и запустите тесты:
$ сделать $ сделать тест
uvloop имеет двойную лицензию MIT и Apache 2.0.