异步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支持。