想问下大家平时用 Python 中 asyncio 库的时候,有什么技巧?或者说用了哪些 high level 或 low level 的 api? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
BeUself

想问下大家平时用 Python 中 asyncio 库的时候,有什么技巧?或者说用了哪些 high level 或 low level 的 api?

  •  
  •   BeUself Jun 28, 2024 1983 views
    This topic created in 670 days ago, the information mentioned may be changed or developed.

    比如下面我经常用的

    1. asyncio.run(coro) 运行顶层的协程,直到完成,适合简单的脚本和测试。
    2. asyncio.create_task(coro) 创建一个异步任务,用于并行执行协程。
    3. asyncio.gather(*coros, return_exceptiOns=False) 并行运行多个协程,收集它们的结果。
    4. asyncio.Lock 异步锁,用于同步访问共享资源。
    5. asyncio.Event 异步事件,用于在协程间通信。
    6. asyncio.Semaphore 和 asyncio.BoundedSemaphore 条件变量,允许协程等待某个条件成立。

    看看大家平时还用了什么 API ?获取能学到新东西

    6 replies    2024-06-29 21:21:45 +08:00
    keakon
        1
    keakon  
       Jun 28, 2024   2
    如果你除了结果,还关注状态或异常等信息,以及返回时机的控制,可以用 asyncio.wait 取代 asyncio.gather 。
    asyncio.to_thread 可以把同步调用转成异步。
    asyncio.Queue 可以实现并发控制,比如预先分配 10 个资源,那么只有 10 个协程能 get 资源,其他的会被阻塞,直到用完资源的协程把资源放回队列。
    zhuangzhuang1988
        2
    zhuangzhuang1988  
       Jun 28, 2024   1
    官方文档过一遍全是技巧
    比如还有加入 debug 选项看调试
    结构化并发 TaskGroup
    Lihanx9
        3
    Lihanx9  
       Jun 28, 2024   1
    以前用得多的时候,设计项目代码经常会参考 scrapy/twisted
    感觉 asyncio/gevent/twisted 核心的 api 功能都差不多,毕竟系统层面的依赖都是一样的,所以经常去另外两个的项目里找灵感..
    BeUself
        4
    BeUself  
    OP
       Jun 28, 2024
    @lihanx9 多谢。我也去看看
    nowheremanx
        5
    nowheremanx  
       Jun 29, 2024
    不才,写过一个项目,感觉 python 下面 asyncio 的 api 很奇葩,搞不清楚,每次都要查文档才能写。

    明明都是 async ,写起来和 JS 感觉差好多。
    BeUself
        6
    BeUself  
    OP
       Jun 29, 2024
    @nowheremanx 对啊 我也觉得
    About     Help     Advertise     Blog     API     FAQ     Solana     1295 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 23:43 PVG 07:43 LAX 16:43 JFK 19:43
    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