asyncio里semphore的原理和示例
时间: 2024-05-09 10:18:01 浏览: 131
cas.tar.gz_CAS_Mutex_multithread_semphore
Semaphore是asyncio中的同步原语,用于控制同时进行的协程数量。它可以用来控制对有限资源的访问,比如数据库连接池、API请求接口等。一般来说,在协程中访问这些资源的数量要有限制,而Semaphore可以帮助我们实现这种限制。
下面是一个Semaphore的示例:
```python
import asyncio
async def worker(semaphore):
async with semaphore: # 使用 with 语句获取 semaphore
print("Starting work")
await asyncio.sleep(1) # 模拟工作
print("Finishing work")
async def main():
semaphore = asyncio.Semaphore(2) # 允许同时执行的协程数量为 2
await asyncio.gather(
worker(semaphore),
worker(semaphore),
worker(semaphore),
worker(semaphore)
) # 同时执行 4 个 worker 协程
asyncio.run(main())
```
Semaphore的原理是,每个协程需要获取Semaphore对象的锁才能继续执行,同时只有有限数量的协程可以获取到这个锁。如果Semaphore的计数器为0,则正在等待的协程会被加入一个等待队列,直到有足够的计数器可以被释放。
笑话时间:
为什么前端工程师喜欢用Emmet写HTML?
因为Emmet写法快,像刘德华一样洒脱!
阅读全文