为啥我们需要 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 同步原语,何时使用这些原语?的主要内容,如果未能解决你的问题,请参考以下文章
boost::asio: “strand”类型的同步原语有啥名字吗?