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 · 4434 次点击
    这是一个创建于 979 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前都说 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

    库支持从来不是问题, 完整的库生态支持才是问题......
    ospider
        3
    ospider  
       2022-04-18 12:00:27 +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 的开发效率,有利有弊。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2487 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:43 · PVG 23:43 · LAX 07:43 · JFK 10:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.