Queue FIFO 先进先出
LifoQuere 先进后出(栈)
PriorityQueue 优先队列(通过自定义算法实现)
为什么用Queue库
python标准库是线程之间常见的数据交换形式,Queue的使用可以确保Python的线程安全
2. 常用方法
q = Queue.Queue(maxsize) 创建队列,并可以指定大小
q.empty() 判断队列是否为空
q.full() 判断队列是否满
q.put(data) 向队列中放入数据
q.get() 从队列中拿数据
q.task_done() 宣告队列操作结束,并且修改队列状态
q.join() 让主线程等待所有队列操作完毕再结束
```go
import time
import queue
import threading
import random
def product(query_info):
for i in range(5000):
time.sleep(0.5)
item = random.randint(0, 100)
query_info.put(item)
print(f'在队列中放入数据项:{item}')
def consumter(query_info):
while True:
try:
item = query_info.get(timeout=3)
print(f'在队列中移除数据项:{item}')
except queue.Empty:
break
else:
query_info.task_done() # task_done()声明当前队列处理完毕
def main():
q = queue.Queue() #maxsize=4
threads = []
p = threading.Thread(target=product, args=(q, ))
p.start()
for i in range(2):
t = threading.Thread(target=consumter, args=(q, ))
t.start()
t.join()
q.join() # 队列所有项处理完毕前阻塞
main()