信号量
信号量:
信号量就对线程最大并发数做限制,
如果当前线程开启的个数超过了线程最大并发量,
超出的线程要暂停执行,直到有线程执行完成,才加入新的线程
代码
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 """
队列
- 介绍
线性结构:栈 和 队列
栈:先进后出,
队列:先进先出,
哈希结构:字典,散列结构
- 代码
1 from queue import Queue 2 3 # 创建一个队列。参数代表对列的长度,如果不传默认对列可以无限长 4 q = Queue(6) 5 6 # 向队列中添加内容 7 q.put("马云") 8 q.put("马化腾") 9 q.put("马赛克") 10 q.put("李嘉诚") 11 q.put("老王") 12 q.put("大头儿子") 13 14 print(q.full()) # 队列是否已满 15 print(q.empty()) # 队列是否为空 16 print(q.qsize()) # 队列的数据量 17 18 q.put("小头爸爸") # 如果队列已满,程序就会暂停等待 19 20 # 向队列取出数据 21 print(q.get()) 22 print(q.get()) 23 print(q.get()) 24 print(q.get()) 25 print(q.get()) 26 print(q.get()) 27 28 print(q.get()) # 如果队列已空,再出队就进入等待状态