Asyncio-vs-Curio: Worse-Is-Better - 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
guyskk0x0
V2EX    Python

Asyncio-vs-Curio: Worse-Is-Better

  •  2
     
  •   guyskk0x0
    guyskk 2018-07-29 15:28:49 +08:00 4680 次点击
    这是一个创建于 2630 天前的主题,其中的信息可能已经有所发展或是发生改变。
    16 条回复    2021-07-15 15:35:22 +08:00
    kzing
        1
    kzing  
       2018-07-29 16:08:41 +08:00   1
    有想法, 有实践, 很酷
    JhZ7z587cYROBgVQ
        2
    JhZ7z587cYROBgVQ  
       2018-07-29 16:35:51 +08:00   1
    可以的,支持
    neoblackcap
        3
    neoblackcap  
       2018-07-29 16:59:48 +08:00
    想法很好,但是有几点可以讨论

    "从表面上看,Curio 应该有更少的 Bug,因为它的设计更合理。实际使用后, 你会发现它和 Asyncio 的 Bug 一样多,甚至更多"
    1. asyncio 在文中说 bug 比 Curio 少,那么按照定义 asyncio 又怎么会是 worse?

    2. 接口以及用法应当一致,不应当有零零散散,格格不入的接口。
    身为一个程序员我是认同这一点的,但是对于软件而言是否优秀而言,我又不这样认为。一致,那么跟什么一致?功能跟用途本身就是不一样,那么一致在哪里?比如 Unix 里面的一切皆是文件,所有操作都可以简化成 write 和 read。很一致对不对?但是我觉得网络跟文件本身就不是这样的东西,那么到底什么需要一致?如何界定呢?

    而且当你在设计一个没有可以参考的东西,或者你想着有些创新的时候,那么一致是否那么重要?我觉得这个应该是更加符合人的使用习惯入手才是对的。一个新软件的使用,不管你设计得多么一致,大家都是从新入门。只有不断学习或者迁移已有的经验。那么如果更符合人的使用习惯,那么软件就可以称之为优秀,哪怕他们不一致,比如吃牛排的时候就用刀叉,吃中餐就用筷子。
    Wincer
        4
    Wincer  
       2018-07-29 17:33:35 +08:00 via Android
    很不错,支持一下
    guyskk0x0
        5
    guyskk0x0  
    OP
       2018-07-29 17:51:06 +08:00
    @neoblackcap
    1. Asyncio 在很早,还有很多 Bug 的时候就发布了,那个时候它是 Worse。
    Curio 设计更细致,发布更晚,第一版就比较完善了,但此时 Asyncio 经过了几轮迭代,也比较完善了。
    从设计者的角度,可能会希望等软件比较完善了( Better )再发布,但更好的选择是在软件基本可用时( Worse )就发布。
    2. 比如 Curio 的 Socket API 和标准库的 Socket 是基本一致的,学习成本很低。而 Asyncio 是全新的 API,没有统一设计规则,给人的感觉就是不一致的。问题在于 Curio 过早地追求一致性,异步场景下必然会需要新的,不一致的 API。

    这是我的理解。
    tkmiles
        6
    tkmiles  
       2018-07-29 19:30:40 +08:00
    抛开源码, 设计, 性能等等

    至少看 curio 的源码至少能比较轻松的入门 python 中的 async, 协程的调度可以怎么做, 至于这么做好不好, 每个人都有自己的看法

    而 asyncio 的源码, 理解的难度有点高

    再者, curio 的目的只是一个 async 的"例子", asyncio 作为标准库, 自然有更多应用上的考虑
    guyskk0x0
        7
    guyskk0x0  
    OP
       2018-07-29 19:38:09 +08:00
    @tkmiles 完全同意
    keysona
        8
    keysona  
       2018-07-29 20:21:32 +08:00   1
    楼主辛苦了。
    ----
    下面是些无关的话。

    记得 flask 的作者曾经吐槽过 python 的 asyncio ....

    自己也曾花了点时间看 asyncio 的文档...虽然一段时间不用就忘光了,毕竟太多概念了...

    以下是个人看法,若需要异步 io 或者性能等,个人会用 go 语言。

    然后,文本处理、数据分析等会用 python。

    适合的工具干适合事。
    6ufq0VLZn0DDkL80
        9
    6ufq0VLZn0DDkL80  
       2018-07-29 21:49:21 +08:00
    个人感觉 python 的异步是各大主流语言里最为反直觉的一种设计。不是很懂 asyncio 的应用场景。不如用 Go。
    owenliang
        10
    owenliang  
       2018-07-30 09:01:20 +08:00 via Android
    asyncio 辣鸡,基于 generator 的协程都是反人类 没前途。
    zhzer
        11
    zhzer  
       2018-07-30 10:02:17 +08:00
    asyncio 虽然不友好接口各种冗余,但是够用了吧

    并且 py 协程的社区环境一点都不活跃,新东西要发挥作用还是任重道远
    zhengxiaowai
        12
    zhengxiaowai  
       2018-07-30 11:42:06 +08:00
    asyncio 概念太多了,而且好多相似的,很多接口缺乏 demo,到现在我也不知道是用来做什么的
    janxin
        13
    janxin  
       2018-07-30 11:52:34 +08:00
    asyncio 在 3.7 版本中添加了 asyncio.run(),在优雅性上切近了 curio

    3.8 版本即将引入 asyncio.TaskGroup()和可能会有类似 trio 的超时和取消机制

    这一点确实 asyncio 正在变得更好
    d18
        14
    d18  
       2018-07-30 12:17:32 +08:00
    本来想用 asyncio 干点事,看了半天文档感觉很乱,而且相关的异步库支持也不够,很多还是非阻塞实现,于是转用 go 干活了。
    sleshep
        15
    sleshep  
       2018-07-30 17:02:36 +08:00
    curio 的 dns 操作都放到线程池处理而不是像 tornado 一样可以可选接入 cares 等异步 dns 库是个暂时的小缺点
    kernel.py 真的好长,look giant and insane
    qgb
        16
    qgb  
       2021-07-15 15:35:22 +08:00
    在 trio (和 curio )中,核心设计原则之一就是你从不用回调编程;感觉更像基于线程的编程而不是基于回调的编程。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     912 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 20:06 PVG 04:06 LAX 13:06 JFK 16:06
    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