Starlette:一个轻量级的 Python ASGI 框架
Starlette 在 GitHub 上已经拿到 12,359 Star 了。
这是一个轻量级的 ASGI 框架和工具包,专门用于在 Python 中构建异步 Web 服务。
1、这玩意儿是干嘛的
Starlette 的核心目标很简单:提供一个足够轻、足够简单的框架来运行异步 Web 服务。
它基于 ASGI 标准,内置了 WebSocket 支持、进程内后台任务、启动和关闭事件。HTTP 层面覆盖 CORS、GZip、静态文件、流式响应。状态管理覆盖 Session 和 Cookie。测试客户端直接基于 httpx,开箱即用。
整个代码库做了完整的类型注解,测试覆盖率达到 100%。核心依赖只有一个 anyio,httpx、jinja2、python-multipart、itsdangerous、pyyaml 都是可选安装。
2、为什么要用它
Python 的异步 Web 框架选择不少,但很多要么功能堆砌过多,要么基础能力缺失。Starlette 卡在中间位置:该有的都有,不该带的都不装。
它同时兼容 asyncio 和 trio 两种异步后端,在独立基准测试中性能表现靠前。更重要的是它的两用设计。你可以把它当作完整的 Web 框架来用,也可以只拿其中的组件作为 ASGI 工具包。甚至只需要一个 PlainTextResponse,就能搭出一个最小应用。
这种模块化思路让组件可以在不同 ASGI 框架之间复用,中间件和挂载应用都能共享。API 边界清晰,每个部分单独理解起来也不费劲。
3、安装和使用
安装:
pip install starlette
还需要一个 ASGI 服务器,比如 uvicorn:
pip install uvicorn
最小示例:
from starlette.applications import Starlette
from starlette.responses import JSONResponse
from starlette.routing import Route
async def homepage(request):
return JSONResponse({'hello': 'world'})
routes = [Route("/", endpoint=homepage)]
app = Starlette(debug=True, routes=routes)
运行:
uvicorn main:app
如果想启用所有可选功能:
pip install starlette[full]
4、适合哪些人用
- 需要构建异步 Web 服务的 Python 开发者
- 在做 ASGI 生态工具、需要可复用组件的人
- 追求低依赖、类型安全、测试覆盖完善的项目