信号量(Semaphore)
信号量用来控制线程并发数的,BoundeSemaphore或Semaphore管理一个内置的计数器,每当调用acquire()时-1,调用release()时+1。
计数器不能小于0,当计数器为0时,acquire()将阻塞线程至同步锁定装填,直到其他线程调用release()。
BoundeSemaphore与Semaphore时唯一区别在于前者将在调用release()时检查计数器的值是否超过了计数器的初始值,如果超过了就跑出一个异常。
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author: smoke
# file: Semaphore
# time: 2021/04/05
import threading,time
class myThread(threading.Thread):
def run(self):
if semaphore.acquire():
print(self.name)
time.sleep(3)
semaphore.release()
if __name__ == "__main__":
semaphore = threading.BoundedSemaphore(5) #创建信号量锁,5代表多少个锁数量
thrs=[]
for i in range(100):
thrs.append(myThread())
for t in thrs:
t.start()
/home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/venv/bin/python /home/smoke/文档/DocumentFile/PycharmProjects/pythonProject/join/Semaphore.py
Thread-1
Thread-2
Thread-3
Thread-4
Thread-5
Thread-6
Thread-8Thread-7
Thread-9
Thread-10
Thread-11
Thread-14Thread-13Thread-12
Thread-15
Thread-17Thread-16
Thread-18
Thread-19
Thread-20
Thread-21
Thread-22
Thread-24Thread-23
Thread-25
Thread-26
Thread-27
Thread-28Thread-29
Thread-30
Thread-31
Thread-32
Thread-33
Thread-34
Thread-35
Thread-36
Thread-37
Thread-39
Thread-38
Thread-40
Thread-41
Thread-42Thread-43
Thread-44
Thread-45
Thread-46
Thread-47
Thread-48Thread-49
Thread-50
Thread-51
Thread-52
Thread-53
Thread-54
Thread-55
Thread-56
Thread-57
Thread-58Thread-59
Thread-60
Thread-61
Thread-62
Thread-63
Thread-64
Thread-65
Thread-66
Thread-67Thread-68
Thread-69
Thread-70
Thread-71
Thread-73Thread-74
Thread-72
Thread-75
Thread-76
Thread-78
Thread-77
Thread-79
Thread-80
Thread-81
Thread-82
Thread-83
Thread-84
Thread-85
Thread-86
Thread-87
Thread-89
Thread-90
Thread-88
Thread-91
Thread-92
Thread-93
Thread-94
Thread-95
Thread-96
Thread-97
Thread-98
Thread-99
Thread-100
Process finished with exit code 0
浙公网安备 33010602011771号