标签归档:asgi

Uvicorn-闪电般的ASGI服务器。🦄

闪电般的ASGI服务器

文档https://www.uvicorn.org

要求:Python 3.6+(要支持Python 3.5,请安装版本0.8.6。)

Uvicorn是一个闪电般的ASGI服务器实现,使用uvloophttptools

直到最近,Python还缺乏用于异步框架的最低级别的服务器/应用程序接口。这个ASGI specification填补了这一空白,意味着我们现在能够开始构建一组可在所有异步CIO框架中使用的通用工具

Uvicorn目前支持HTTP/1.1和WebSockets。计划支持HTTP/2

快速入门

使用以下方式安装pip

$ pip install uvicorn

这将安装具有最小(纯Python)依赖项的uvicorn

$ pip install uvicorn[standard]

这将安装带有“基于Cython的”依赖项(如果可能)和其他“可选的附加项”的uvicorn。

在此上下文中,“基于Cython”的含义如下:

  • 事件循环uvloop将在可能的情况下安装和使用
  • http协议将由httptools如果可能的话

此外,“自选额外服务”的意思是:

  • WebSocket协议将由websockets(您是否要使用wsproto如果可能,您需要手动安装)
  • 这个--reloader处于开发模式的标志将使用watchgod
  • Windows用户将拥有colorama为彩色原木安装的
  • python-dotenv如果您要使用--env-file选项
  • PyYAML将被安装,以允许您提供.yaml文件到--log-config,如果需要

创建应用程序,在example.py

async def app(scope, receive, send):
    assert scope['type'] == 'http'

    await send({
        'type': 'http.response.start',
        'status': 200,
        'headers': [
            [b'content-type', b'text/plain'],
        ],
    })
    await send({
        'type': 'http.response.body',
        'body': b'Hello, world!',
    })

运行服务器:

$ uvicorn example:app

Uvicorn是BSD licensed代码
在英国布赖顿设计和建造

-🦄-

Sanic-异步Python 3.7+Web服务器/框架|快速构建

SANIC|快速构建。跑得很快

构建
文档
套餐
支持
统计数据

Sanic是一家Python 3.7+Web服务器和Web框架,它们都是为快速运行而编写的。它允许使用async/awaitPython3.5中添加的语法可使您的代码实现非阻塞和快速

Sanic也符合ASGI,因此您可以使用alternative ASGI webserver

Source code on GitHub|Help and discussion board|User Guide|Chat on Discord

该项目由社区维护,为社区服务。欢迎投稿!

该项目的目标是提供一种简单的方法来设置和运行易于构建、易于扩展并最终可扩展的高性能HTTP服务器

赞助商

使用完整的源代码树上下文在IDE中管理拉请求和执行代码审查。评论任何一行,而不仅仅是不同之处。将跳转到定义、您最喜欢的键绑定和代码智能用于更多工作流

Learn More

感谢我们的赞助商。检查open collective了解有关帮助资助Sanic的更多信息

安装

pip3 install sanic

Sanic利用uvloopujson来帮助提高绩效。如果您不想使用这些软件包,只需添加一个环境变量SANIC_NO_UVLOOP=trueSANIC_NO_UJSON=true在安装时

$ export SANIC_NO_UVLOOP=true
$ export SANIC_NO_UJSON=true
$ pip3 install --no-binary :all: sanic

注意事项

如果您正在全新安装的Fedora 28或更高版本上运行,请确保您有redhat-rpm-config安装软件包,以防您要使用sanic使用ujson依赖性

注意事项

Windows支持目前是“试验性的”,并且是在尽最大努力的基础上。Windows当前也不支持多个工作进程(请参见Issue #1517),但设置workers=1应成功启动服务器

Hello World示例

from sanic import Sanic
from sanic.response import json

app = Sanic("My Hello, world app")

@app.route('/')
async def test(request):
    return json({'hello': 'world'})

if __name__ == '__main__':
    app.run()

SANIC现在可以使用以下工具轻松运行sanic hello.app

[2018-12-30 11:37:41 +0200] [13564] [INFO] Goin' Fast @ http://127.0.0.1:8000
[2018-12-30 11:37:41 +0200] [13564] [INFO] Starting worker [13564]

而且,我们可以验证它是否正常工作:curl localhost:8000 -i

HTTP/1.1 200 OK
Connection: keep-alive
Keep-Alive: 5
Content-Length: 17
Content-Type: application/json

{"hello":"world"}

现在,让我们快点造点东西吧!

最低Python版本为3.7。如果您需要Python 3.6支持,请使用v20.12LTS

文档

User GuideAPI Documentation

更改日志

Release Changelogs

问题和讨论

Ask a question or join the conversation

贡献

我们总是很高兴有新的贡献。我们有marked issues good for anyone looking to get started,欢迎您的到来questions on the forums请看一下我们的Contribution guidelines