闪耀的小asgi图书馆。
starlette的Python项目详细描述
闪耀的小asgi框架。
社区:https://discuss.encode.io/c/starlette
星体
Starlette是一个轻量级的框架/工具包, 这是构建高性能异步服务的理想选择
它已准备好生产,并提供以下功能:
- 令人印象深刻的表演。
- WebSocket支持。
- GraphQL支持。
- 进程内后台任务
- 启动和关闭事件。
- 测试客户端建立在
requests
上。 - cors,gzip,静态文件,流式响应。
- 会话和cookie支持。
- 100%测试覆盖率。
- 100%类型注释代码库。
- 零硬依赖。
要求
Python3.6+
安装
$ pip3 install starlette
您还需要安装asgi服务器,例如uvicorn、daphne或hypercorn。
$ pip3 install uvicorn
示例
fromstarlette.applicationsimportStarlettefromstarlette.responsesimportJSONResponseimportuvicornapp=Starlette(debug=True)@app.route('/')asyncdefhomepage(request):returnJSONResponse({'hello':'world'})if__name__=='__main__':uvicorn.run(app,host='0.0.0.0',port=8000)
有关更完整的示例,请参见encode/starlette-example。
依赖关系
Starlette没有任何硬依赖项,但以下是可选的:
- ^{
} -如果要使用TestClient
,则为必需 - ^{
} -如果要使用FileResponse
或StaticFiles
,则需要。 - ^{
} -如果要使用Jinja2Templates
,则为必需。 - ^{
} -如果要支持表单解析,则需要使用request.form()
。 - ^{
} -需要SessionMiddleware
支持。 - ^{
} -需要SchemaGenerator
支持。 - ^{
} -需要GraphQLApp
支持。 - ^{
} -如果要使用UJSONResponse
,则为必需。
您可以使用pip3 install starlette[full]
安装所有这些文件。
框架或工具包
Starlette被设计成一个完整的框架,或者 asgi工具包。您可以独立使用它的任何组件。
fromstarlette.responsesimportPlainTextResponseasyncdefapp(scope,receive,send):assertscope['type']=='http'response=PlainTextResponse('Hello, world!')awaitresponse(scope,receive,send)
在example.py
中运行app
应用程序:
$ uvicorn example:app INFO: Started server process [11509] INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
使用--reload
运行uvicorn以在代码更改时启用自动重新加载。
模块化
Starlette的模块化设计促进了建筑的可重用性 可以在任何asgi框架之间共享的组件。这将使 共享中间件和可安装应用程序的生态系统
干净的api分离还意味着更容易理解每个组件 与世隔绝。
性能
独立的TechEmpower基准显示在Uvicorn下运行的Starlette应用程序 作为one of the fastest Python frameworks available(*)
对于高吞吐量负载,您应该:
- 确保安装
ujson
,并使用UJSONResponse
- 使用gunicorn使用
uvicorn
工作类运行。 - 每个CPU核心使用一个或两个工人(您可能需要对此进行实验。)
- 禁用访问日志记录。
例如
gunicorn -w 4 -k uvicorn.workers.UvicornWorker --log-level warning example:app
一些asgi服务器还提供纯python实现, 因此,如果应用程序代码的部分是 CPU受限。
编程方式:
uvicorn.run(...,http='h11',loop='asyncio')
或使用Gunicorn:
gunicorn -k uvicorn.workers.UvicornH11Worker ...
--
starlette是BSD licensed代码。在英国布莱顿设计和制造。