之前都说 web 服务开发都是的瓶颈多是网络 IO 与磁盘 IO 造成的。 以前的 python 同步框架并发高的时候会很慢,但是异步框架 sanic 性能很高可以与 gin 相媲美。 那么还有必要换 go 语言吗,自己对 go 还没有做深入了解,所以想请大佬一起聊聊,go 与 python 异步开发的差异性。
1
fgwmlhdkkkw 2022-04-18 11:30:37 +08:00
web 服务的性能瓶颈应该是数据库,前面的再快也就那样吧……
但是最大的瓶颈还是业务本身。 不过对于做技术的人来说,技多不压身嘛~ |
2
westoy 2022-04-18 11:37:54 +08:00 1
你去看看 sanic 列出的三方扩展, 有几个在一两年内还有维护的
python 从来不缺协程库, 20 年前就有 stackless 和 twisted , 十几年前 eventlet , 十年前 gevent 库支持从来不是问题, 完整的库生态支持才是问题...... |
3
ospider 2022-04-18 12:00:27 +08:00
难道不应该是团队用啥你用啥……
|
4
ClericPy 2022-04-18 12:14:15 +08:00
粗略看单核效率的话, Python 和 golang 的协程并发性能差距其实并不大, 多核差距开多核也能拉近. 就拿现在比较主流的 Fastapi 一两万 QPS 的性能来说, 日常根本到不了这种量级的压力, 等到了这个压力的时候, 自然也有新的认识, 估计也不会再问出这种问题
总而言之, 选最擅长的, 其次再考虑业界主流(主要容易招人). 先顺应团队生态, 再考虑顺应市场生态, 前者决定生存, 后者决定发展 |
5
est 2022-04-18 12:17:51 +08:00
你们瓶颈都在 web 框架上?
俺这还是在 db 上。 |
6
jones2000 2022-04-18 12:22:40 +08:00
主要看能不能通过提升机器性能来,解决问题,如果可以。 升级硬件。 开发是没有办法中的办法了, 花十几 W 升级硬件多美,你用十几 W 能招几个人, 下次开人还要 N+1 。
|
7
kingjpa 2022-04-18 12:37:47 +08:00
好尴尬,我这里除了压测,还没遇到瓶颈。。。
|
8
longmeier90 OP @kingjpa 我们太菜了,嘎嘎嘎...
|
9
liuxingdeyu 2022-04-18 13:56:38 +08:00 1
我觉得,学一门语言更多是为了学这门语言的主流编程思想
|
10
lux182 2022-04-18 14:27:25 +08:00
sanic 周边似乎有点少,go 不熟悉。
|
11
neoblackcap 2022-04-18 14:50:39 +08:00 2
go 一整个语言就是协程框架,sanic 没法跟它比性能的。
只要是 go 生态的,那么就已经是进入了它的协程生态。python 生态却不一样,有很多同步库的。 但是如果你因为这个问题来问选什么的话,那么我建议你不用选。你自己熟悉什么语言就继续用什么语言就可以了。我还说 Rust 的 actix-web 性能更强,难道你还要去学 Rust? 一般业务的性能差异,我觉得还轮不到你来考虑这些框架的性能满足不了你。这些框架哪个不能轻松解决 C10K 问题?而且 C10K 都是 20 年前的问题了。但是你的生产环境有 C10K 问题吗?等你的业务上了 1 万并发再来考虑吧。 |
12
raycool 2022-04-18 14:53:52 +08:00
以前我用 tornado 写过几个生产项目,不过对并发要求都不高。
|
13
roundgis 2022-04-18 14:57:45 +08:00 via Android
又不是不能用。。。
|
14
dilu 2022-04-18 15:06:39 +08:00
相信我,99.99%的项目,其实都不会有性能问题。
|
15
iyaozhen 2022-04-18 15:50:38 +08:00 1
主要是生态(就业) 这么说吧,你搞 Python Web ,这个公司,这个产品可能都没问题,一旦裁员变动,就肯定没有 Go Web 的好找工作
|
16
nonduality 2022-04-18 20:21:51 +08:00
IG 这些年来始终用 Django ,除了优化性能,就是加机器,而不是改用语言或框架。
|
17
venicid 2022-04-18 22:58:19 +08:00
不用转,不要来,学 python 挺好的(狗头)别和我抢饭碗
|
18
ToBeHacker 2022-04-19 02:38:22 +08:00
你用了异步,所有的 IO 都得用异步库,目前这方面 Python 的生态还是不够
|
19
Kobayashi 2022-04-19 10:46:37 +08:00
没有,曾经专注于 asyncio 研究了各种异步框架、事件循环代码。但后来入职才发现,很多时候没必要看的那么远,绝大多数的业务根本达不到那样的并发压力。面试的时候曾经面过 2 个做小说的,一个由 Python 转了 Go ,说是用户量大了。另一个就是老 Python 单体项目,缓存+限流,运营时间比前者长,业务流量也比前者大。这是从业务角度来看问题。除非你是什么大厂的主项目,一般都没有那么大的并发。
从技术角度,我觉得都行,吃透一个就够了。实际上大多数人对下边原理都不了解。我见过选 Sanic 调用接口触发模型训练的,觉得 Sanic 快,但根本没看清场景。捕蛇者说播客里,有个来自知乎主持人因为写不出 ASGI 中间件,就觉得 ASGI 协议有问题…… 从钱的角度,可能是 Golang 。 |
20
rust 2022-04-19 15:18:48 +08:00
你们已经触及到 Sanic 的性能瓶颈了吗?
|
21
mlbjay 2023-07-06 11:55:41 +08:00
可以读下我的文章: https://blog.csdn.net/weixin_42359693/article/details/131460845
局限不是 Sanic 框架,是整个 Python 异步生态的问题。 纯 Sanic 框架很快,虽然远远比不上 Gin 之类的。但是痛点是 一个高频使用的库是同步 io ,就会阻塞整个协程,进而 消耗掉 Sanic 带来的性能提升,一旦设计不好,可能导致基于异步 io 框架的并发性能 还不如 线程池并发。 基于线程池并发开发,还更容易排查 bug ,异步 io 库一旦出问题,非常诡异。 |
22
mlbjay 2023-07-06 11:57:09 +08:00
@Kobayashi 大实话,我的同感也差不多,Golang 带来的性能提升 和 远不如 Python 的开发效率,有利有弊。
|