异步Web框架:Starlette
前面介绍过的Flask是一个基于WSGI的阻塞式Web微型框架。阻塞式架构在使用时,常常会遇到性能问题,例如某一个访问请求需要消耗较长的时间来进行处理和组织响应,那么就会导致使用相同服务线程的其他访问请求进入排队,一旦一台服务器的全部服务线程被占满,那么就会使服务的性能出现瓶颈。在这情况就会显得Web服务性能低下,但这是WSGI阻塞式架构的固有缺陷。
为了解决这些缺陷,Python社区顺应时代发展潮流推出了WSGI的继任者——ASGI,异步Web服务框架。ASGI采用异步访问,占据资源较多或者耗时较长的访问请求不会影响其他的访问请求,利用现代多核心多线程CPU的特点以及异步函数的特性大大提升了Web服务的性能。
ASGI框架还不是很多,目前其中的佼佼者可算是Starlette,其综合性能较Flask提升了约250%。Starlette的使用与Flask十分相似,在具体项目中从Flask切换到Starlette并不困难。
Starlette主要提供了以下现代Web开发的常用功能支持:
- WebSocket;
- GraphQL;
- 进程内后台任务;
- 启动与中止事件任务;
- CORS、GZip与静态文件、流的支持;
- Session与Cookie支持。