Python django 框架有没有办法像 go 框架一样支持大并发呢?

2019-10-18 12:18:13 +08:00
 dzmcs

django+uwsgi+gevent,性能和 go 框架能差几个数量级?

gevent 补丁替换了 io 支持协程,并发性能肯定不如 go,能不能使用比如腾讯的 libco,也用猴子补丁的方式,替换 io 操作,达到和 go 差不多数量级的并发效率呢?

或者有没有其他什么方式?

4543 次点击
所在节点    问与答
28 条回复
rrfeng
2019-10-18 12:26:37 +08:00
没有。
ClericPy
2019-10-18 12:29:56 +08:00
uvicorn + channels(asgi)?
听过没用过, Django 的性能比 starlette 慢好几个数量级, 更别说 falcon... 然后 falcon 和 golang 还是差距很大, 放弃吧, 不打 C 补丁不加机器, 追不上 go 的
love
2019-10-18 12:33:20 +08:00
django 不是主要操作都是在数据库吗? 不用数据库有什么理由用 django?用了数据库主要性能点在数据库上了吧
111111111111
2019-10-18 12:36:07 +08:00
异步 IO 只是改善了 IO,CPU 的效率没有改善
lxml
2019-10-18 12:40:34 +08:00
为啥非要用 python 写 web,超过一个人共同维护的代码动态语言总有一天踩到坑,前端同学都弃暗投明转 ts 了。
dzmcs
2019-10-18 12:40:57 +08:00
@ClericPy 做 web 比较菜,没听过这几个框架,就用了下 django,性能被吐槽,所以想找下有没有现成的改善办法。
c 语言打补丁,如果能在 uwsgi 上打补丁,或者语言层面的补丁能提升并发性能也好啊,纯好奇,没有大并发经验。
感谢!
dzmcs
2019-10-18 12:42:48 +08:00
@love 确实,瓶颈其实都在数据库。就是好奇,python 有没有办法也跑大的并发。谢谢
dzmcs
2019-10-18 12:43:58 +08:00
@lxml 因为菜啊,只会 c 和 python,懒得学其他语言和框架
dzmcs
2019-10-18 12:46:37 +08:00
@111111111111 用好的异步 io 或者协程,其他瓶颈的地方用 c 打补丁,能否和 go 比性能?
malusama
2019-10-18 12:47:05 +08:00
以前也总是想着这么提高并发。后来发现做的站根本没人访问。。
Reficul
2019-10-18 12:48:24 +08:00
现在是有啥问题执着增加并发,为啥觉得“并发”是瓶颈,啥才是“并发”?

现在是 CPU 密集了,IO 密集了,还是数据库扛不住了?
dzmcs
2019-10-18 12:53:28 +08:00
@Reficul 好奇而已
ClericPy
2019-10-18 12:54:32 +08:00
@dzmcs 走协程是在 IO 开销那边尽可能的减少资源浪费, 然而与 C 语言写的东西的瓶颈是没办法追上的, Django 全家桶的概念就是一把梭, 把常用代码打包好直接像乐高一样插起来就用了, 性能方面依靠 nginx 负载均衡多搞几台机器, 具体优化可以去看看 Instagram 他们怎么通过手动 GC 等方法优化 Django 来撑住高并发

C 语言打在 uwsgi 也没法突破那个瓶颈的, japronto 那个框架看起来进军 Benchmark 第一梯队, 里面其实很多 tricker 手段, 我是不敢上生产环境, vibora 框架虽然快, 但是里面绝大部分代码都是 C 写的, 所以不算纯 py 项目了, Django 在底层实现上就吃了亏, 很难追得上的. falcon 没用过, 也没看过源码, 不知道为啥那么快......

至于性能被吐槽, python 本来就被吐槽性能了, Django 只是在 py 框架里更差, 不过新版本支持 channels 的 asgi 实现以后, 提高了一些

附 Benchmark 的某个项目, 以及 fastapi 那边看的一个结果

https://github.com/the-benchmarker/web-frameworks

https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7
love
2019-10-18 12:55:00 +08:00
@dzmcs 基本上 99.9%的公司都不会困扰于语言的性能,你是不是杞人忧天了。豆瓣早期的时候听说就一个 py web 服务机器就撑了非常大的用户数,你到了这个用户量再考虑其它。
Reficul
2019-10-18 13:00:09 +08:00
@dzmcs

先考虑架构能不能扩展,在考虑语言性能把。

非要说的话,CPU 密集型就 Profile 之后改成 C 模块,IO 密集的话还得看是连接多还是数据量大,考虑怎么优化。。。

比较语言没啥用,还不如看看为啥这个语言慢,哪个适合哪个,知道背后的原来所以然。 在合适的场景用合适的技术。
dzmcs
2019-10-18 13:07:32 +08:00
@ClericPy
谢谢!
纯粹是好奇,优化 GC 能全局优化,但是要有一定水平,效益肯定最大。但是即便没有优化语言的水平,真有性能问题,打 c 补丁总能赶上主流框架。多谢分享
dzmcs
2019-10-18 13:14:14 +08:00
@Reficul
没机会遇到性能瓶颈,就是好奇,谢谢

cpu 密集了,打 c 补丁,io 密集了,不知道能不能调用一下高性能的 c 协程库?如果可以调用腾讯的 libco,某些场合,是不是可以追上 go 的性能?

如果 c 既能解决 cpu 密集,也能解决 io 密集,胶水的作用完成的岂不更好。
Vegetable
2019-10-18 13:19:18 +08:00
Django 的架构应该是不太行,还是要用协程,基于 event loop 的方案,比如 tornado 和 sanic 这种,高并发是能解决的
ClericPy
2019-10-18 13:42:02 +08:00
@dzmcs 上面那些劝你别研究这个的估计平时也是被人劝着先做好业务别纠结过早优化过, 不用在意, 都是好心

用 C 解决问题就是那个 vibora 框架, 你看看他们源码可以稍微了解一点, 至于想上第一梯队的性能, 还是得换语言, 甚至考虑下 pypy 也好, 不过用过 pypy 的朋友似乎都劝退了... 看那个 Benchmark, golang 都进不去第一梯队, Nim 语言倒是让我瞎了一下

目前中小企业用 golang 一方面是请个实习生就可以抗住一些需求, 不像 python, 看起来学一周就能开发东西, 实际上很多常识性的坑比 golang 要多. 稍微大点的企业选择 golang 可能也是用 python 的时候绞尽脑汁, 但效果都不理想, 才不得已放弃的, 就像某乎, 在 python 上优化了很多很多地方, 实际上反而不如整个迁 go 来的省心, 毕竟现在都讲个效率, 动作慢了连口屎都吃不上热乎的

目前的现状是, python 已经可以抗住绝大部分需求了, 做大做强的话, 需要的 python 高级程序员太贵, 从成本收益和后期维护上, 一百个 java 程序员可能只写出一种代码, 而一百个 python 开发者指不定能写出一百以上个变种, 语法糖太多, 不搞统一规范就是在玩屎山... golang 目前来说不是说太优秀, 只是其他对手问题太多

表明立场, 我喜欢 python
zhangxudong
2019-10-18 14:00:47 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/610606

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX