7.3.9

一 线程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
运行结果
原文地址:https://www.cnblogs.com/caimengzhi/p/8524649.html