上古时代的人们会使用tornado等异步框架来提高并发性能。
我以前则采用gevent的协程方式来提供并发能力。
现在有更快的汽车。
如果只知道python新版本的async/await的用法,也是不够快的。
python默认采用asyncio的事件loop,如何让它更快呢?
采用uvloop取代python默认的asyncio.
为什么uvloop可以更快?
因为它采用了更快的cython编写(不是cpython),cython会将python转为c级别。
并基于libuv构建(用python给libuv封了一层)。而libuv则是高并发的nodejs的异步IO库,性能非常高。
推荐阅读:http://magic.io/blog/uvloop-blazing-fast-python-networking/
还能更快吗?可以!
我们发现python的常用http解析器aiohttp对http的解析很慢!
这里,采用快的多的httptools取代aiohttp。
为什么httptools会更快?
因为这是高性能的nodejs所使用的http解析器(采用c开发),性能会提高很多。
现在python最高性能的框架uvicorn,核心就是基于上面的uvloop和httptools 2个发动机改造而成的,是python最快的框架。
(sanic是uvloop+ujson,性能差于uvicorn)
各类框架的性能比较:https://www.techempower.com/benchmarks/#section=data-r19
为了易用性,有很多方法使用uvicorn。
最简单的是使用gunicorn,和以前的差别是,worker类型选择uvicorn,而不是上古的gevent等异步worker。
另一种方法是使用基于uvicorn二次开发的框架。
这些框架的选择,可以参考:https://fastapi.tiangolo.com/benchmarks/(当然fastapi自己出品,当然会说自己好,但是最近fastapi的增长是非常快的)