7.3.9 - 并发多线程 - 线程queue
Posted 如果迎着风就飞,俯瞰这世界有多美
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7.3.9 - 并发多线程 - 线程queue相关的知识,希望对你有一定的参考价值。
一 线程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
以上是关于7.3.9 - 并发多线程 - 线程queue的主要内容,如果未能解决你的问题,请参考以下文章