信号量
- 信号量和锁机制基本是类似的,都是为了让资源的分配和进程的调度更加的有序,但是和锁机制不同的是:锁机制一次只能获取一把钥匙,信号量一次可以获取多把钥匙,数量可以设定。
- 基本的流程:
- 导入模块:from multiprocessing import Semaphore
- 实例化信号量对象:se = Semaphore(num),num一个锁是获取几把钥匙
- 获取钥匙:se.acquire()
- 归还钥匙,释放资源:se.release()
- 计数器为0的时候就表示没有钥匙了,需要剩余的进程继续等待,如果不为0,则可以获得钥匙。
from multiprocessing import Process,Semaphore
se = Semaphore(5)
# 实例化信号量,得到五把钥匙
se.acquire()
print(1)
se.acquire()
print(2)
se.acquire()
print(3)
se.acquire()
print(4)
se.acquire()
print(5)
# se.release()
# # 开门,释放一个资源,归还一把钥匙
se.acquire()
print(6)
'''
结果是:
1
2
3
4
5
'''
# 由于只有五把钥匙,所以只能打印五个,第六个无法打印,但是如果前边有归还的,后边就可以继续运行。