uvloop é uma substituição rápida e imediata do loop de eventos assíncio integrado. uvloop é implementado em Cython e usa libuv nos bastidores.
A documentação do projeto pode ser encontrada aqui. Por favor, verifique também o wiki.
uvloop torna o asyncio 2-4x mais rápido.
O gráfico acima mostra o desempenho de um servidor de eco com diferentes tamanhos de mensagens. O benchmark de soquetes usa os métodos loop.sock_recv()
e loop.sock_sendall()
; o benchmark de streams usa streams asyncio de alto nível, criados pela função asyncio.start_server()
; e o benchmark do protocolo usa loop.create_server()
com um protocolo de eco simples. Leia mais sobre o uvloop em uma postagem do blog sobre ele.
uvloop requer Python 3.8 ou superior e está disponível no PyPI. Use pip para instalá-lo:
$ pip instalar uvloop
Observe que é altamente recomendável atualizar o pip antes de instalar o uvloop com:
$ pip instalar -U pip
A partir do uvloop 0.18, a forma preferida de usá-lo é através da função auxiliar uvloop.run()
:
import uvloop
async def main ():
# Main entry-point.
...
uvloop . run ( main ())
uvloop.run()
funciona simplesmente configurando asyncio.run()
para usar uvloop, passando todos os argumentos para ele, como debug
, por exemplo uvloop.run(main(), debug=True)
.
Com Python 3.11 e versões anteriores, o seguinte trecho alternativo pode ser usado:
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 ())
Para construir o uvloop, você precisará do Python 3.8 ou superior:
Clone o repositório:
$ git clone --recursive [email protected]:MagicStack/uvloop.git $ cd uvloop
Crie um ambiente virtual e ative-o:
$ python3 -m venv uvloop-dev $ fonte uvloop-dev/bin/ativar
Instale dependências de desenvolvimento:
$ pip instalar -e.[dev]
Crie e execute testes:
$ fazer $ fazer teste
uvloop tem licença dupla sob licenças MIT e Apache 2.0.