一 线程queue
queue is especially useful in threaded programming when information must be exchanged safely between multiple threads.
有三种不同的用法
1. class queue.Queue(maxsize=0) #队列:先进先出

import queue # 队列 q = queue.Queue(3) q.put("first") q.put(2) q.put("three") print(q.get()) print(q.get()) print(q.get())

first 2 three
2. class queue.LifoQueue(maxsize=0) #堆栈:last in fisrt out

import queue q=queue.LifoQueue() q.put(1) q.put(2) q.put(3) print(q.get()) print(q.get()) print(q.get())

3 2 1
3. class queue.PriorityQueue(maxsize=0) #优先级队列:存储数据时可设置优先级的队列
结果(数字越小优先级越高,优先级高的优先出队):
#put进入一个元组,元组的第一个元素是优先级(通常是数字,也可以是非数字之间的比较),数字越小优先级越高

import queue q = queue.PriorityQueue(3) # 优先级,越小优先级越大 q.put([10,‘one‘]) # first 优先级 second data q.put([30,‘two‘]) # first 优先级 second data q.put([20,‘three‘]) # first 优先级 second data print(q.get()) print(q.get()) print(q.get())

[10, ‘one‘] [20, ‘three‘] [30, ‘two‘]
Put方式是元组或者列表

import queue q = queue.PriorityQueue(3) # 优先级,越小优先级越大 q.put((10,‘one‘)) # first 优先级 second data q.put((30,‘two‘)) # first 优先级 second data q.put((20,‘three‘)) # first 优先级 second data print(q.get()) print(q.get()) print(q.get())

(10, ‘one‘) (20, ‘three‘) (30, ‘two‘)
其他参数,阻塞,和超时时间

import queue q=queue.Queue(3) q.put(1) q.put(2) q.put(3) q.put(4,timeout=3) # 阻塞,3秒后异常退出报,队列满了

import queue q=queue.Queue(3) q.put(1) q.put(2) q.put(3) q.put(4,block=True,timeout=3)
q.get也一样。
查看队列是否满了后者空了

import queue q=queue.Queue(3) q.put(1) q.put(2) q.put(3) print(q.full()) # 查看队列是否满了 print(q.empty()) # 查看队列是否空了 print(q.get()) print(q.get()) print(q.get()) print(q.full()) print(q.empty())

True False 1 2 3 False True