信号量
信号量:
信号量就对线程最大并发数做限制,
如果当前线程开启的个数超过了线程最大并发量,
超出的线程要暂停执行,直到有线程执行完成,才加入新的线程
代码
1 import threading 2 from time import sleep 3 4 # 定义一个信号量(线程的最大并发量) 5 sem = threading.Semaphore(2) # 允许2个线程并发执行 6 7 def func(): 8 with sem: # 设置并发量。防止并发访问亮过载,影响服务器 9 print("当前线程%s正在执行..."%threading.current_thread().name) 10 sleep(2) 11 print("当前线程%s执行结束"%threading.current_thread().name) 12 13 if __name__ == '__main__': 14 for _ in range(5): # 开启五个线程 15 t = threading.Thread(target=func) 16 t.start()
结果
1 结果: 2 """ 3 当前线程Thread-1正在执行... 4 当前线程Thread-2正在执行... 5 当前线程Thread-1执行结束 6 当前线程Thread-2执行结束 7 当前线程Thread-3正在执行... 8 当前线程Thread-4正在执行... 9 当前线程Thread-3执行结束 10 当前线程Thread-4执行结束 11 当前线程Thread-5正在执行... 12 当前线程Thread-5执行结束 13 """