为啥我们需要 asyncio 同步原语,何时使用这些原语?

Posted

技术标签:

【中文标题】为啥我们需要 asyncio 同步原语,何时使用这些原语?【英文标题】:Why we need asyncio synchronization primitives, when to use these?为什么我们需要 asyncio 同步原语,何时使用这些原语? 【发布时间】:2020-01-11 16:38:52 【问题描述】:

根据asyncio synchronization primitives,有同步 方法。

我对为什么我们需要在 asyncio 中进行同步感到困惑? 我的意思是,异步是 异步。 在异步中添加同步的东西有意义吗?

【问题讨论】:

【参考方案1】:

同步原语不会使您的代码同步,它们使您的代码中的协程同步。

几个例子:

您可能希望仅在另一个协程允许时启动/继续某个协程 (asyncio.Event) 您可能希望代码的某些部分仅由单个协程同时执行,而其他部分等待轮到它们执行 (asyncio.Lock) 您可能希望代码的某些部分只能在有限数量的协同程序上同时执行 (asyncio.Semaphore)

看看使用asyncio.Semaphore的practical example。

【讨论】:

以上是关于为啥我们需要 asyncio 同步原语,何时使用这些原语?的主要内容,如果未能解决你的问题,请参考以下文章

何时以及为啥要使用 Java 同步? [复制]

boost::asio: “strand”类型的同步原语有啥名字吗?

高性能编程之协程--------asyncio

从同步原语看非阻塞同步以及Java中的应用

为啥我们需要复制构造函数以及何时应该在 java 中使用复制构造函数

试图使 asyncio 与 telnetlib 一起工作