闪耀的小asgi图书馆。

starlette-naokipeter的Python项目详细描述


starlette

闪耀的小asgi框架。

Build StatusCoveragePackage version


文档https://www.starlette.io/


星体

starlette是一个轻量级的ASGI框架/工具包, 这是构建高性能异步服务的理想选择。

它已准备好生产,并提供以下功能:

  • 令人印象深刻的表演。
  • WebSocket支持。
  • GraphQL支持。
  • 进程内后台任务。
  • 启动和关闭事件。
  • 测试客户端建立在requests上。
  • cors,gzip,静态文件,流式响应。
  • 会话和cookie支持。
  • 100%测试覆盖率。
  • 100%类型注释代码库。
  • 零硬依赖。

要求

Python3.6+

安装

$ pip3 install starlette

您还需要安装asgi服务器,例如uvicorndaphnehypercorn

$ 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,则为必需。
  • ^{}-如果要使用FileResponseStaticFiles,则需要。
  • ^{}-如果要使用Jinja2Templates,则为必需。
  • ^{}-如果要支持表单解析,则需要使用request.form()
  • ^{}-需要SessionMiddleware支持。
  • ^{}-需要SchemaGenerator支持。
  • ^{}-需要GraphQLApp支持。
  • ^{}-如果要使用UJSONResponse,则为必需。

您可以使用pip3 install starlette[full]安装所有这些文件。

框架或工具包

Starlette被设计成一个完整的框架,或者 asgi工具包。您可以独立使用它的任何组件。

fromstarlette.responsesimportPlainTextResponseclassApp:def__init__(self,scope):assertscope['type']=='http'self.scope=scopeasyncdef__call__(self,receive,send):response=PlainTextResponse('Hello, world!')awaitresponse(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代码。在英国布莱顿设计和制造。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么大摇大摆的ui不显示带注释的REST方法?   soapweb服务概念。(来自WSDL的Java或来自Java的WSDL)   java Junit测试日志语句   java如何使Sonar与XMLInputFactory和woodstox库注册的实现兼容?   java无法启动活动组件信息{com.example.countryselect/com.example.countryselect.OfferSelect}   java在2d数组中递增对象   java在序列化和反序列化期间如何调用构造函数?   JavaFx:在按钮内设置布尔值并将其取出   java GWT如何异步发送表单?   java编译错误。木卫一。必须捕获或声明IOException错误   java无法解释的长时间停止在G1 Collector中的并发标记步骤期间世界暂停   java计算J2EE应用程序中对象的出现次数   Java使用相同的变量名和值定义字符串常量   java Samsung键盘退格不适用于SearchView   java将Spring Web应用程序部署到JBoss WebApplicationContext异常   java在加载jsp时试图调用servlet   Vertx JDBC NoSuchMethodError’java。sql。连接io。农业的。应用程序编程接口。交易交易整合。getConnection()   JAVAutil。scanner使用scanner读取Java文件