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

6 天前
 xhatt510

比如下面我经常用的

  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 ?获取能学到新东西

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

明明都是 async ,写起来和 JS 感觉差好多。
xhatt510
4 天前
@nowheremanx 对啊 我也觉得

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1053369

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX