标签归档:async-await

Uvloop-超高速异步事件循环

uvloop是内置异步事件循环的快速插入式替代。uvloop是用Cython实现的,并在幕后使用libuv可以在以下位置找到项目文档here请同时查看wiki

性能

uvloop使异步速度提高2-4倍

上图显示了具有不同消息大小的回应服务器的性能。这个插座基准使用loop.sock_recv()loop.sock_sendall()方法;溪流Benchmark使用异步高级流,由asyncio.start_server()函数;以及协议基准使用loop.create_server()使用简单的回声协议。阅读有关uvloop的更多信息,请参阅blog post关于这件事

安装

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

$ pip install uvloop

请注意,强烈建议您升级pip之前使用以下命令安装uvloop:

$ pip install -U pip

使用uvloop

打电话uvloop.install()在打电话之前asyncio.run()或手动创建异步事件循环:

import asyncio
import uvloop

async def main():
    # Main entry-point.
    ...

uvloop.install()
asyncio.run(main())

从源构建

要构建uvloop,您需要Python 3.7或更高版本:

  1. 克隆存储库:
    $ git clone --recursive git@github.com:MagicStack/uvloop.git
    $ cd uvloop
    
  2. 创建虚拟环境并将其激活:
    $ python3.7 -m venv uvloop-dev
    $ source uvloop-dev/bin/activate
    
  3. 安装开发依赖项:
    $ pip install -e .[dev]
    
  4. 构建和运行测试:
    $ make
    $ make test
    

许可证

uvloop在MIT和Apache 2.0许可下双重许可

Trio-Trio-用于异步并发和I/O的友好Python库

Trio项目的目标是生产一种生产质量高、permissively licensed,异步/等待-Python的本机I/O库。与所有异步库一样,它的主要目的是帮助您编写执行以下操作的程序同时做多件事使用并行I/O一个想要并行获取大量页面的网络蜘蛛,一个需要同时处理大量下载和websocket连接的网络服务器,一个监控多个子进程的进程管理程序。诸如此类的事情。与其他图书馆相比,Trio试图通过痴迷于可用性正确性并发性是复杂的;我们试图使其简单易懂去拿东西正确的

三人组是从头开始建造的,目的是利用latest
Python features
,并从以下方面获得灵感many sources,特别是戴夫·比兹利的Curio由此产生的设计从根本上比老的竞争对手要简单得多,比如asyncioTwisted,但同样有能力。Trio是我一直想要的Python I/O库;我发现它使构建面向I/O的程序变得更容易、更不容易出错,而且更有趣。Perhaps you’ll find the same

这个项目还很年轻,还有点实验性:总体设计是可靠的,现有的特性经过了充分的测试和记录,但是您可能会遇到功能缺失或边缘粗糙的问题。我们鼓励你使用它,但你应该read and
subscribe to issue #1
以获得警告,并有机会就任何破坏兼容性的更改提供反馈

下一站是哪里?

我想试试!太棒了!我们有一个friendly tutorial来帮助您入门;不需要以前的异步编码经验

呃,我不想看这些-给我看一些代码!如果你不耐烦,这里有一个simple concurrency example,一个echo client,和一个echo server

与竞争方法相比,Trio如何使程序更易于阅读和推理?TRIO基于一种我们称之为“结构化并发”的新思维方式。最好的理论介绍是这篇文章Notes on structured concurrency, or: Go statement
considered harmful
或,check out this talk at PyCon 2018观看在旧图书馆与Trio中实施“快乐眼球”算法的演示

酷,但它能在我的系统上工作吗?可能吧!只要您有某种Python3.6或更好的版本(CPython或最新的Py3都可以),并且使用的是Linux、MacOS、Windows或FreeBSD,那么Trio就可以工作。其他环境可能也可以工作,但这些都是我们测试的环境。我们所有的依赖项都是纯Python,除了Windows上的CFFI,它有轮子可用,所以安装应该很容易(不需要C编译器)

我试过了,但它不起作用听到这个我很难受!您可以尝试在我们的chat roomforumfiling a bug,或posting a
question on StackOverflow
,我们会尽最大努力帮助你

三人组很棒,我想让它变得更棒!你是最棒的!有大量的工作要做-填补缺失的功能,建立一个Trio使用库的生态系统,可用性测试(例如,也许可以试着教自己或朋友使用Trio,并列出您遇到的每条错误消息和您感到困惑的地方?),改进文档。请查看我们的guide
for contributors
好了!

我目前还没有使用它的计划,但我喜欢研究I/O库设计!这有点奇怪吗?但老实说,你会很适合这里的。我们有一个whole sub-forum
for discussing structured concurrency
(欢迎其他系统的开发人员!)或查看我们的discussion of design
choices
reading list,以及issues tagged design-discussion

我想确保我公司的律师不会生我的气!不用担心,Trio根据您选择的麻省理工学院或Apache2获得许可。LICENSE有关详细信息,请参阅

行为规范

请投稿人遵循我们的code of conduct在所有项目空间中