Django、Flask、FastAPI,Sanic , Python 后端哪个更好?
直接上图对比:
Django 的工具集更全一些,这也导致很多时候它的性能并不理想。认识我的同行知道我是个很不关注性能的人,但是Django的性能感性的说,已经到了我这种人也觉得不够理想的程度。这是开发的便捷带来的代价,另外就是很多Django用起来非常方便的东西,比如Admin Form,其实是有其应用背景的,在最初Django就是为了支持新闻类网站项目开发出来的,很多组件放在这种应用场景下就非常合理了。但是如果脱离了这个背景,Django没有必然的优势。比如你要搭建复杂业务的后台时,如果 Admin Form不够用,你需要扩展一个已经开始使用 Admin Form的项目,就会非常的麻烦。
Django 向产业界证明了,Python可以在互联网开发中提供类似 ROR 的生产效率,此后有一系列类似的 Python Web Framework产生,很多流行甚至不那么流行的,我都用过,老实说大部分框架在性能和复杂应用的搭建上,跟 Django比没有本质性的优越,相反在 Django 最擅长的领域,它仍然是最好的。
Flask 可以看作松散组件方向的演化结果,它的设计思路是从一开始就让所有的组件尽可能正交分解,Flask 本身尽可能保持中立,这个方向的远古产品是……嗯太多年不用了,我都想不起那个东西叫什么了,Pyramid ?这个方向的设计思路类似 Spring,Flask 是这个体系中比较现代的产品,风格足够 Pythonic,也足够轻量,优快云 的 AI 组也用这个框架,好处是它本身对业务代码的侵入比较弱,当然对性能也不必期待过高。
FastAPI可以看作协程体系的现代产品,跟 Tornado 相比充分利用了高版本 Python 的异步语法,对 Python 3.6 之后的异步技术有更好的集成,也对很多现代互联网的运维和架构技术有更好的支持,比如对 swigger/openapi 的支持,对grafana之类的日志和tracing工具的支持,这对于现代互联网行业的软件工程,有非常高的价值。但是说到性能,其实不要被它们的测试数据蒙蔽,理论上说 Tornado 和 FastAPI 是qps在 10k以上的产品,属于比较高性能的应用框架。但是实践上要发挥协程框架的性能,要求开发者能够驾驭协程技术,也要求业务本身足够适配,也就是说,其实很难写出这么快的应用。我以前工作过的团队,有大量使用 tornado的,也有大量使用 FastAPI的,那些应用的性能都很不好。一个好的应用框架,它的性能不应该过度的依赖开发者的水平,比如我用过 Java 的协程框架 quarkus,就很容易写出性能比较好的应用,虽然受限于 Java 笨拙的语法,处理多个monad 的合并和链式操作的时候相当的啰嗦,但是总体来说业务的表达仍然是很浅白的,这一点 Python 的协程框架一般是做不到,要么是一个性能热点卡死整个进程,要么是要精心安排逻辑流程使其尽量的异步并发。
Sanic是一个Python 3.7+的Web框架,主要特点和优势包括:
- 异步处理,支持大量并发连接,提高性能。
- 高性能,速度比Flask快,尤其在高负载下。
1
- 简单直观的API,易于编写Web应用。
1
- 支持WebSocket,适合实时Web应用。
- 插件系统,可扩展功能。
- 丰富的请求和响应处理。
- 基于装饰器的路由系统,简单易用。
- 支持中间件,如日志记录、身份验证。
1
- 支持蓝图,便于应用组织。
- 活跃的社区支持。