闪耀的小asgi图书馆。

starlette的Python项目详细描述


starlette

闪耀的小asgi框架。

Build StatusCoveragePackage version


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

社区https://discuss.encode.io/c/starlette


星体

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

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

  • 令人印象深刻的表演。
  • 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.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代码。在英国布莱顿设计和制造。

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

推荐PyPI第三方库


热门话题
Java计数字符串中的符号数   如何将(Android)应用程序上下文传递给Java类?   arraylist中的java查找索引始终位于1   java如何在Grpc中通过MethodDescriptor的InputStream调用服务器?   java Netbeans、Glassfish部署问题   java在安卓上拖放一个按钮。。帮助   java Hibernate不从映射表填充数据   数组用户定义的文件读取函数导致NullPointerException Java   java组织。冬眠ErrorClassException:对象[id=null]不属于指定的子类   java中迭代破坏二叉树的算法   openssl如何通过java确保使用哪个私钥创建服务器证书   伏地魔项目的java对象映射   java这是JSlider中的一个bug吗?   java Spring究竟如何使用JDK代理?   java跨JVM分发订阅者   java Mockito void方法如何检查私有变量?   java如何在安卓 Studio中启用httpclient?   java软件设计原则:将您的收藏与处理对象分开?   java Exe包装的JavaFX应用程序(使用Launch4J)不会打开其他阶段   读取Java中可能被其他进程修改的文件