异步是 Python web 的未来吗 - 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
limyel
V2EX    Python

异步是 Python web 的未来吗

  •  1
     
  •   limyel 2020-07-25 12:19:57 +08:00 9359 次点击
    这是一个创建于 1904 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今年刚毕业入职一家小公司,主要用 Python 开发 API 。之前我都是用 Django 和 DRF,工作之后公司的项目全是异步的...以后的项目也都用 fastapi 了,现在异步、asgi 在 Python 越来越火了吗
    67 条回复    2020-07-27 16:01:20 +08:00
    ClericPy
        1
    ClericPy  
       2020-07-25 12:27:23 +08:00
    爱用什么用什么, 协程给我最大的帮助就是再也没有阻塞的地方, 而且任何任务都可以无痛 cancel, 如果用多线程, 想杀它难的要死

    现在我基本只用 Fastapi 了, 但是看面试还是 Python3 没用过协程的占多数, 所以主流应该还是老一套, ASGI 正在变好, 绝大多数库也都有了协程替代品, 早学早享受
    heiheidewo
        2
    heiheidewo  
       2020-07-25 13:01:39 +08:00   3
    只会 python 哪来的未来
    ericls
        3
    ericls  
       2020-07-25 13:05:06 +08:00
    asgi 应该会成为 async web 的主流,但是 wsgi 不会被完全取代。

    事实上,asgi 对 wsgi 虽然不完全兼容,但是很容易兼容。

    在不需要 async IO 的情况下,同一台服务器两者性能差距不会太大,因为 Python 始终是 Python,asgi 让很多 wsgi 不能做的事情变得容易做了。
    Jirajine/td>
        4
    Jirajine  
       2020-07-25 13:06:58 +08:00 via Android
    async 不如绿色线程那么直观,但用起来还是很爽的。
    JB18CM
        5
    JB18CM  
       2020-07-25 13:07:08 +08:00   16
    python 在 web 没有未来
    Vegetable
        6
    Vegetable  
       2020-07-25 13:11:13 +08:00
    django 和他的 orm 不能完美适配 async 之前,局面不会有太大变化
    mitu9527
        7
    mitu9527  
       2020-07-25 13:15:56 +08:00
    同 5 楼,Python 在 web 没有未来
    janxin
        8
    janxin  
       2020-07-25 13:19:20 +08:00 via iPhone
    社区不做一些改变,python 就在 web 没有未来
    ericls
        9
    ericls  
       2020-07-25 13:22:20 +08:00   1
    我周围的很多公司都用 python 做 web,也没看出有什么问题能让你们觉得没有未来。
    janxin
        10
    janxin  
       2020-07-25 13:26:14 +08:00
    @ericls 因为做数据科学的更多...
    ericls
        11
    ericls  
       2020-07-25 13:29:22 +08:00 via iPhone
    @janxin 的确很多 但是 数据和做 Python 其实是两个社区。
    unicloud
        12
    unicloud  
       2020-07-25 13:41:57 +08:00 via iPhone
    是 py 以后的未来
    love
        13
    love  
       2020-07-25 13:45:44 +08:00
    写 web 还是 nodejs 比较合适,js 天生异步,前后端同一语言,typescript 静态检查+vscode,体验比 py 好得多
    Nich0la5
        14
    Nich0la5  
       2020-07-25 13:47:48 +08:00 via Android
    java 没异步不还是照样
    wuwukai007
        15
    wuwukai007  
       2020-07-25 13:49:39 +08:00
    wsgi 都用十几年了,都没啥。现实是项目经理让你用 web.py 你也得硬着头皮上
    wysnylc
        16
    wysnylc  
       2020-07-25 14:44:12 +08:00
    @Nich0la5 #14 有
    di94sh
        17
    di94sh  
       2020-07-25 17:12:30 +08:00 via iPhone
    python 的 async 还是有很多场景需要任务队列或者多线程,goroutine 可以平滑的解决很多这种场景,元语言抽象后的异步编程还是很香的。python web 方向 asgi 的使用率肯定会越来越多,但是我认为大部分公司会把需要的地方用合适的语言技术重构成独立的服务。
    Nich0la5
        18
    Nich0la5  
       2020-07-25 17:13:14 +08:00 via Android
    @wysnylc 我的表述不对,是没有协程实现的异步
    abcbuzhiming
        19
    abcbuzhiming  
       2020-07-25 17:18:05 +08:00   2
    @ericls 程序猿一定要跳出自己的圈子去别处看看,否则的话很容易被自己的圈子误导,python 做 web 有没有问题?当然没问题,它可以做啊。但是有一个叫 Java 和一个叫 PHP 的东西,外带一个 Go 的衬托下,python 做 web 就没未来了,不是你不能做,而是比较优势问题
    Trim21
        20
    Trim21  
       2020-07-25 17:32:58 +08:00
    异步、asgi 在 Python 是越来越火了,但是 python 在 web 越来越火了吗...
    maemual
        21
    maemual  
       2020-07-25 17:38:21 +08:00   2
    我怎么感觉 Python Web 的未来是 Golang 呢。。。。
    Vibra
        22
    Vibra  
       2020-07-25 17:39:16 +08:00 via iPhone
    异步是编程的未来,不是 py 的未来
    wysnylc
        23
    wysnylc  
       2020-07-25 17:41:55 +08:00
    @Nich0la5 协程目前有第三方包能实现,jdk 的正在开发中
    所以,有
    rockyou12
        24
    rockyou12  
       2020-07-25 19:51:15 +08:00
    @Nich0la5 对不起……java 也已经有协程了,只是是都不是 jdk 里的
    so1n
        25
    so1n  
       2020-07-25 20:34:09 +08:00
    使用的 fastapi 好处不止是协程,还有结合 TypeHint 这个也很重要的
    ericls
        26
    ericls  
       2020-07-25 21:14:59 +08:00 via iPhone
    @abcbuzhiming 除了 java 你说的两种都用过 还用过别的语写 web 比如 Node elixir rust 我也不觉得 Python 在 web 会死掉. 写起来快 性能不差 你能说说具体为什么 Python 会死吗?
    abersheeran
        27
    abersheeran  
       2020-07-25 22:00:46 +08:00
    只会 Python 是没有未来的。异步的确是 Python web 的未来。
    GoLand
        28
    GoLand  
       2020-07-25 22:49:45 +08:00
    但凡在项目里用过 Python 异步的也说不出 “异步是 Python web 的未来这种话”,Python web 的未来真的是 Go 。
    TypeError
        29
    TypeError  
       2020-07-25 22:58:43 +08:00 via Android
    @abcbuzhiming 跳出圈子的话,欧美还一堆公司用 Ruby 呢
    youngce
        30
    youngce  
       2020-07-25 23:11:52 +08:00
    以前 Python 多线程异步解决不了的问题,协程异步就能解决了吗?协程异步确实减少了系统开销,协程异步代码一定程度更简单。但是你去看看 go 的协程是多么的无脑且高效。。。。Python 异步也不是一个什么新话题了,真没必要说什么越来越火了
    Hstar
        31
    Hstar  
       2020-07-25 23:53:30 +08:00
    异步的确是 Python Web 的未来,只是这未来有点远,远得像是在天际。
    目前 django 本身对 async 的支持也只是 in progress,什么时候 ORM 和底层 SQL 连接库都支持 async 了再说。
    qiaobeier
        32
    qiaobeier  
       2020-07-26 00:01:36 +08:00
    web 的 py 是好 py
    jeeyong
        33
    jeeyong  
       2020-07-26 01:00:19 +08:00
    半开个玩笑说, WEB 的未来没有 Python
    leimao
        34
    leimao  
       2020-07-26 01:02:16 +08:00
    个人感觉做 client 还可以,做 server 那应该别想了
    laike9m
        35
    laike9m  
       2020-07-26 02:30:59 +08:00 via Android
    fastapi 的主要优势并不是异步,而是依赖注入和自动文档生成,此外就是好得令人发指的开发文档了。用过的都知道有多香
    laike9m
        36
    laike9m  
       2020-07-26 02:33:38 +08:00 via Android
    对了,原生支持 pydantic 也是一大优势
    phithon
        37
    phithon  
       2020-07-26 02:44:12 +08:00
    python web 脱离了 django 生态,没有未来
    forrestchang
        38
    forrestchang  
       2020-07-26 03:08:07 +08:00
    我司 10 亿级 PV 的 Python Web 项目,也没什么问题,用的 wsgi 。
    abersheeran
        39
    abersheeran  
       2020-07-26 04:59:12 +08:00   4
    要申明一下,ASGI 本身就是 Django 团队提出来的。fastapi 红的快主要是率先提出了 type hint 进行类型检查 /转换 + 自动生成 docs 这个概念。而 Django 由于尾大不掉,现在要全部转换异步生态需要很久,但绝不是不转换了。我预测在 21/22 年就可以全异步了。

    Django 从过去,到现在,始终是 Python web 开发里最好的框架,没有之一。说实话,fastapi 就是个拼接怪罢了,它自己什么也没实现,type hint + openapi 是用的 pydantic,web 相关所有组件全部搬的 starlette 。

    Python 的 web 生态,除了 Django,其他的 web 框架还真算是有生态?有多少是强耦合的必需品?基本都是通用的,flask 用的照样可以走 bottle 。而现在 ASGI 里,fastapi 能用的,照样可以走 starlette/index.py ,没有框架有 Django 一样的统治地位。我虽然自己也写了实际投入了生产的 web 框架,但我心里最好的 web 框架依旧是 Django,并且只有 Django 。
    abcbuzhiming
        40
    abcbuzhiming  
       2020-07-26 09:12:08 +08:00   1
    @ericls 我给你举个例子好了,java 写 PC UI 。有没有,有啊,被论坛天天吹的 IDEA 全家桶不就是 java 写的。但是 java 写 UI 在业界是主流还是非主流,自己扪心自问一下就明白了。

    Python 写 Web 会不会死,当然不会,我相信 Python 写 web 的那几个框架会继续进化下去,甚至十几年后,只要 Python 没死,Python 仍然有可能会被人用来写 web 。但是,“能够用”和“大家都愿意用”,这是两个概念。

    你问我什么原因,比较优势问题,另外一个就是马太效应。其实这真的很明显了,我真的觉得不是你看不出来 python 在写 web 这个问题上根本没法和 java,php 甚至 go 抗衡。而是你拒绝承认这点。可能你爱着 python 吧
    abcbuzhiming
        41
    abcbuzhiming  
       2020-07-26 09:15:56 +08:00
    @TypeError Ruby on Rail 是业界第一在 ORM 领域搞出 ActiveRecord 模型和以链式调用实时生成 sql 查询语句的。这两点导致它当年可以开箱即用,极大的解放了 CRUD 的劳动强度。不过随着时间的过去这几板斧被其它语言学过去了。这东西就有点明日黄花了。用还是有人用的,不过我上面说了“有人用”和“大家都愿意用”,这是两回事
    ericls
        42
    ericls  
       2020-07-26 09:17:18 +08:00
    @abcbuzhiming 我还真看不出来。。。。 而且我觉得 php 和 java 也没法和 go 在 web 方面抗衡。我觉得可能是所处的环境不一样吧,周围有一些公司还在讨论用 python 替换 php 呢(至少去年底他们在讨论这个问题,后来疫情就没聚会了)。
    zqguo
        43
    zqguo  
       2020-07-26 10:28:07 +08:00
    用 Node 写 web 不香吗?(狗头)
    yzk66880
        44
    yzk66880  
       2020-07-26 10:46:57 +08:00
    emmmm, 你上手用 async 生态写几个接口就知道了.... 很多别扭的地方
    CharAct3
        45
    CharAct3  
       2020-07-26 10:49:05 +08:00
    @abersheeran fastapi 其实可以改个名字叫 starlette-rest-framework,不过作者确实很用心,文档写的很好,又会营销,也算是为 asgi 生态做出了贡献吧
    676529483
        46
    676529483  
       2020-07-26 11:19:33 +08:00
    且不说语法和开发者的素质,可以测试下 fastapi 和 gin 在 QPS 上的差距,不是一个异步可以挽救的
    echo1937
        47
    echo1937  
       2020-07-26 11:21:43 +08:00
    @ericls #42
    Web 开发方面,没有哪个语言社区是具有全面的压倒性优势的,几乎没有“你无我有”的东西,更多的是差异化优势。
    即使某个语言在某个方面有优势,也达不到几倍的优势,所以相互替换的意愿都不高。
    从最近几年的情况来看,只有 ruby 和 php 在 web 领域份额丢失比较严重,他们都是因为语言自身社区活力下降导致的。
    ericls
        48
    ericls  
       2020-07-26 11:51:36 +08:00
    @echo1937 我同意
    myCupOfTea
        49
    myCupOfTea  
       2020-07-26 11:58:05 +08:00 via Android
    aio 有场景限制哎,python 的多线程模型不是对 io 挺友好的嘛
    myCupOfTea
        50
    myCupOfTea  
       2020-07-26 12:03:26 +08:00 via Android
    处理消息有时效性的需要用 aio 要注意,之前爬虫 500 个 future,aio-pika 那边接消息会很慢,发消息也经常超时
    CosimoZi
        51
    CosimoZi  
       2020-07-26 12:31:38 +08:00
    某门语言的 fanboy 怎么这么多啊
    deali
        52
    deali  
       2020-07-26 12:41:29 +08:00
    @abcbuzhiming .netcore 现在也不错了
    charlie21
        53
    charlie21  
       2020-07-26 12:55:10 +08:00
    web 的未来有或没有 python 随便,那么 web 的未来一定一定会有哪些语言呢?
    fox0001
        54
    fox0001  
       2020-07-26 13:19:12 +08:00 via Android
    未来,关键还是你做出个什么。PHP 有未来吗?人家用 PHP 造了 Facebook
    fox0001
        55
    fox0001  
       2020-07-26 13:20:04 +08:00 via Android
    重点还是钱途吧
    rust
        56
    rust  
       2020-07-26 14:06:43 +08:00
    哪有什么语言是 XXX 的未来,也没有 XX 技术是 XX 领域的未来...
    金主爸爸想用什么语言,什么框架,那什么就是未来...
    abersheeran
        57
    abersheeran  
       2020-07-26 17:23:17 +08:00
    @CharAct3 对。它的作者,营销能力属实让我羡慕……我要有这个水平,也不至于做个小程序员了。
    LokiSharp
        58
    LokiSharp  
       2020-07-26 20:11:35 +08:00 via iPhone   1
    CPython 没有未来
    dvaknheo
        59
    dvaknheo  
       2020-07-26 23:27:17 +08:00
    我记得 python 有个 laravel 的模仿者很活跃。
    但我觉得本身 laravel 就把 php 带偏了。

    web 的开发效率要比运行效率重要得多。
    其中,开发效率包括了调试效率,最怕的是:
    这东西怎么冒出来的,和,我动了这里,怎么我没注意到的地方也崩了?
    johnsona
        60
    johnsona  
       2020-07-27 00:35:00 +08:00
    @abersheeran 可惜很多人不懂,你说 django 好,绝大多数情况都会收到一句回复“但是 django 太重了”,我现在听到这句话就火大,spring 还重呢,有本事别用啊,你看多少人用?找个轻的框架是想要写 toy ? flask 谁用谁知道!!!这框架是轻了,但是项目打了不得模块化开发?不得用上各种扩展,flask 那个扩展又是良莠不齐,真是糟心。还有哦,很多公司那个体量,就别操心高并发的事情了,就算后期访问量暴涨,不是还有 ins 公司的经验可以借鉴吗?不知道瞎搞什么。最近写 flask 真是写得心累
    Carlgao
        61
    Carlgao  
       2020-07-27 09:27:14 +08:00
    动态语言写 web 是真的操蛋,刚开始写起来很爽,后期重构的时候简直了。
    现代的静态语言写起来约束力就好很多,很多错误在编译器就能检查出来,而且有开箱即用的测试,代码健壮性也有保证,所以真看不到 python 在 web 的未来。
    wysnylc
        62
    wysnylc  
       2020-07-27 10:36:38 +08:00
    @Carlgao #61 没有约束写任何项目到后期都是灾难,靠人自觉只会变成向最垃圾最恶心的代码靠齐
    weizhen199
        63
    weizhen199  
       2020-07-27 11:07:39 +08:00
    我大兜奈特,10086 年前就开始异步 web 了 /doge
    linw1995
        64
    linw1995  
       2020-07-27 11:12:08 +08:00
    异步是未来,多任务处理起来太舒服了
    qzxs
        65
    qzxs  
       2020-07-27 12:05:05 +08:00
    同,Python Web 没有未来。
    DanielYao
        66
    DanielYao  
       2020-07-27 12:05:35 +08:00
    .net core 退出群聊......
    ychost
        67
    ychost  
       2020-07-27 16:01:20 +08:00
    spring 退出群......
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3552 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 04:34 PVG 12:34 LAX 21:34 JFK 00:34
    Do have faith in what you're doing.
    ubao 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