跳转到主要内容

基于libuv的asyncio事件循环的快速实现

项目描述

https://img.shields.io/github/actions/workflow/status/MagicStack/uvloop/tests.yml?branch=master https://img.shields.io/pypi/v/uvloop.svg PyPI - Downloads

uvloop 是一个快速、即插即用的 asyncio 事件循环的替代品。uvloop 使用 Cython 实现,并使用 libuv 作为底层。

项目文档可以在 此处 找到。请参阅 Wiki

性能

uvloop 使 asyncio 变得 2-4 倍更快。

https://raw.githubusercontent.com/MagicStack/uvloop/master/performance.png

上图显示了不同消息大小的 echo 服务器的性能。其中,sockets 基准测试使用 loop.sock_recv()loop.sock_sendall() 方法;streams 基准测试使用 asyncio 高级流,由 asyncio.start_server() 函数创建;而 protocol 基准测试使用 loop.create_server() 与简单的 echo 协议。有关 uvloop 的更多信息,请参阅关于它的 博客文章

安装

uvloop 需要 Python 3.8 或更高版本,并在 PyPI 上可用。使用 pip 安装它

$ pip install uvloop

请注意,强烈建议在安装 uvloop 之前先 升级 pip

$ pip install -U pip

使用 uvloop

截至 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 或更高版本

  1. 克隆仓库

    $ git clone --recursive git@github.com:MagicStack/uvloop.git
    $ cd uvloop
  2. 创建一个虚拟环境并激活它

    $ python3 -m venv uvloop-dev
    $ source uvloop-dev/bin/activate
  3. 安装开发依赖项

    $ pip install -e .[dev]
  4. 构建和运行测试

    $ make
    $ make test

许可协议

uvloop 在 MIT 和 Apache 2.0 许可证下双许可。

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

uvloop-0.20.0.tar.gz (2.3 MB 查看哈希值)

上传时间

构建分发

uvloop-0.20.0-cp312-cp312-musllinux_1_1_x86_64.whl (4.1 MB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.1+ x86-64

uvloop-0.20.0-cp312-cp312-musllinux_1_1_aarch64.whl (4.0 MB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.1+ ARM64

uvloop-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.2 MB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ x86-64

uvloop-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.1 MB 查看哈希值)

上传时间 CPython 3.12 manylinux: glibc 2.17+ ARM64

uvloop-0.20.0-cp312-cp312-macosx_10_9_x86_64.whl (738.1 kB 查看哈希值)

上传时间 CPython 3.12 macOS 10.9+ x86-64

uvloop-0.20.0-cp312-cp312-macosx_10_9_universal2.whl (1.3 MB 查看哈希值)

上传时间 CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

uvloop-0.20.0-cp311-cp311-musllinux_1_1_x86_64.whl (4.2 MB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.1+ x86-64

uvloop-0.20.0-cp311-cp311-musllinux_1_1_aarch64.whl (4.2 MB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.1+ ARM64

uvloop-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

uvloop-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.5 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

uvloop-0.20.0-cp311-cp311-macosx_10_9_x86_64.whl (736.7 kB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ x86-64

uvloop-0.20.0-cp311-cp311-macosx_10_9_universal2.whl (1.3 MB 查看哈希值)

上传于 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

uvloop-0.20.0-cp310-cp310-musllinux_1_1_x86_64.whl (4.1 MB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.1+ x86-64

uvloop-0.20.0-cp310-cp310-musllinux_1_1_aarch64.whl (4.1 MB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.1+ ARM64

uvloop-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

uvloop-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.4 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

uvloop-0.20.0-cp310-cp310-macosx_10_9_x86_64.whl (760.4 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ x86-64

uvloop-0.20.0-cp310-cp310-macosx_10_9_universal2.whl (1.4 MB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

uvloop-0.20.0-cp39-cp39-musllinux_1_1_x86_64.whl (4.2 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ x86-64

uvloop-0.20.0-cp39-cp39-musllinux_1_1_aarch64.whl (4.2 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ ARM64

uvloop-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

uvloop-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.5 MB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ARM64

uvloop-0.20.0-cp39-cp39-macosx_10_9_x86_64.whl (740.1 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

uvloop-0.20.0-cp39-cp39-macosx_10_9_universal2.whl (1.3 MB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

uvloop-0.20.0-cp38-cp38-musllinux_1_1_x86_64.whl (4.6 MB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.1+ x86-64

uvloop-0.20.0-cp38-cp38-musllinux_1_1_aarch64.whl (4.6 MB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.1+ ARM64

uvloop-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64

uvloop-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.0 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64

uvloop-0.20.0-cp38-cp38-macosx_10_9_x86_64.whl (765.0 kB 查看哈希值)

上传时间: CPython 3.8 macOS 10.9+ x86-64

uvloop-0.20.0-cp38-cp38-macosx_10_9_universal2.whl (1.4 MB 查看哈希值)

上传时间: CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

由以下支持