web 开发有 Python 的 sanic 的异步框架还有必要转 go 吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
longmeier90
V2EX    Python

web 开发有 Python 的 sanic 的异步框架还有必要转 go 吗

  •  
  •   longmeier90 2022-04-18 11:28:44 +08:00 4860 次点击
    这是一个创建于 1278 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前都说 web 服务开发都是的瓶颈多是网络 IO 与磁盘 IO 造成的。 以前的 python 同步框架并发高的时候会很慢,但是异步框架 sanic 性能很高可以与 gin 相媲美。 那么还有必要换 go 语言吗,自己对 go 还没有做深入了解,所以想请大佬一起聊聊,go 与 python 异步开发的差异性。

    22 条回复    2023-07-06 11:57:09 +08:00
    fgwmlhdkkkw
        1
    fgwmlhdkkkw  
       2022-04-18 11:30:37 +08:00
    web 服务的性能瓶颈应该是数据库,前面的再快也就那样吧……
    但是最大的瓶颈还是业务本身。
    不过对于做技术的人来说,技多不压身嘛~
    westoy
        2
    westoy  
       2022-04-18 11:37:54 +08:00   1
    你去看看 sanic 列出的三方扩展, 有几个在一两年内还有维护的

    python 从来不缺协程库, 20 年前就有 stackless 和 twisted , 十几年前 eventlet , 十年前 gevent

    库支持从来不是问题, 完整的库生态支持才是问题......
    4BVL25L90W260T9U
        3
    4BVL25L90W260T9U  
       2022-04-18 12:00:2 +08:00
    难道不应该是团队用啥你用啥……
    ClericPy
        4
    ClericPy  
       2022-04-18 12:14:15 +08:00
    粗略看单核效率的话, Python 和 golang 的协程并发性能差距其实并不大, 多核差距开多核也能拉近. 就拿现在比较主流的 Fastapi 一两万 QPS 的性能来说, 日常根本到不了这种量级的压力, 等到了这个压力的时候, 自然也有新的认识, 估计也不会再问出这种问题

    总而言之, 选最擅长的, 其次再考虑业界主流(主要容易招人). 先顺应团队生态, 再考虑顺应市场生态, 前者决定生存, 后者决定发展
    est
        5
    est  
       2022-04-18 12:17:51 +08:00
    你们瓶颈都在 web 框架上?

    俺这还是在 db 上。
    jones2000
        6
    jones2000  
       2022-04-18 12:22:40 +08:00
    主要看能不能通过提升机器性能来,解决问题,如果可以。 升级硬件。 开发是没有办法中的办法了, 花十几 W 升级硬件多美,你用十几 W 能招几个人, 下次开人还要 N+1 。
    kingjpa
        7
    kingjpa  
       2022-04-18 12:37:47 +08:00
    好尴尬,我这里除了压测,还没遇到瓶颈。。。
    longmeier90
        8
    longmeier90  
    OP
       2022-04-18 12:50:29 +08:00
    @kingjpa 我们太菜了,嘎嘎嘎...
    liuxingdeyu
        9
    liuxingdeyu  
       2022-04-18 13:56:38 +08:00   1
    我觉得,学一门语言更多是为了学这门语言的主流编程思想
    lux182
        10
    lux182  
       2022-04-18 14:27:25 +08:00
    sanic 周边似乎有点少,go 不熟悉。
    neoblackcap
        11
    neoblackcap  
       2022-04-18 14:50:39 +08:00   2
    go 一整个语言就是协程框架,sanic 没法跟它比性能的。
    只要是 go 生态的,那么就已经是进入了它的协程生态。python 生态却不一样,有很多同步库的。
    但是如果你因为这个问题来问选什么的话,那么我建议你不用选。你自己熟悉什么语言就继续用什么语言就可以了。我还说 Rust 的 actix-web 性能更强,难道你还要去学 Rust?

    一般业务的性能差异,我觉得还轮不到你来考虑这些框架的性能满足不了你。这些框架哪个不能轻松解决 C10K 问题?而且 C10K 都是 20 年前的问题了。但是你的生产环境有 C10K 问题吗?等你的业务上了 1 万并发再来考虑吧。
    raycool
        12
    raycool  
       2022-04-18 14:53:52 +08:00
    以前我用 tornado 写过几个生产项目,不过对并发要求都不高。
    roundgis
        13
    roundgis  
       2022-04-18 14:57:45 +08:00 via Android
    又不是不能用。。。
    dilu
        14
    dilu  
       2022-04-18 15:06:39 +08:00
    相信我,99.99%的项目,其实都不会有性能问题。
    iyaozhen
        15
    iyaozhen  
       2022-04-18 15:50:38 +08:00   1
    主要是生态(就业) 这么说吧,你搞 Python Web ,这个公司,这个产品可能都没问题,一旦裁员变动,就肯定没有 Go Web 的好找工作
    nonduality
        16
    nonduality  
       2022-04-18 20:21:51 +08:00
    IG 这些年来始终用 Django ,除了优化性能,就是加机器,而不是改用语言或框架。
    venicid
        17
    venicid  
       2022-04-18 22:58:19 +08:00
    不用转,不要来,学 python 挺好的(狗头)别和我抢饭碗
    ToBeHacker
        18
    ToBeHacker  
       2022-04-19 02:38:22 +08:00
    你用了异步,所有的 IO 都得用异步库,目前这方面 Python 的生态还是不够
    Kobayashi
        19
    Kobayashi  
       2022-04-19 10:46:37 +08:00
    没有,曾经专注于 asyncio 研究了各种异步框架、事件循环代码。但后来入职才发现,很多时候没必要看的那么远,绝大多数的业务根本达不到那样的并发压力。面试的时候曾经面过 2 个做小说的,一个由 Python 转了 Go ,说是用户量大了。另一个就是老 Python 单体项目,缓存+限流,运营时间比前者长,业务流量也比前者大。这是从业务角度来看问题。除非你是什么大厂的主项目,一般都没有那么大的并发。

    从技术角度,我觉得都行,吃透一个就够了。实际上大多数人对下边原理都不了解。我见过选 Sanic 调用接口触发模型训练的,觉得 Sanic 快,但根本没看清场景。捕蛇者说播客里,有个来自知乎主持人因为写不出 ASGI 中间件,就觉得 ASGI 协议有问题……

    从钱的角度,可能是 Golang 。
    rust
        20
    rust  
       2022-04-19 15:18:48 +08:00
    你们已经触及到 Sanic 的性能瓶颈了吗?
    mlbjay
        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 库一旦出问题,非常诡异。
    mlbjay
        22
    mlbjay  
       2023-07-06 11:57:09 +08:00
    @Kobayashi 大实话,我的同感也差不多,Golang 带来的性能提升 和 远不如 Python 的开发效率,有利有弊。
    关于     帮助文档   span class="snow">   自助推广系统     博客     API     FAQ     Solana     5437 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 08:52 PVG 16:52 LAX 01:52 JFK 04:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86