Python 3.6.4 queue模块

常用方法

put(item[, block[, timeout]])

向队列里添加数据

参数

item:要放入队列的数据。

block:可选参数,默认值为True。当值为True时,阻塞调用(当栈满一直无空间可用,阻塞调用,直到有栈有空间,或timeout秒后结束。

timeout:阻塞超时,当timeout>0时,阻塞调用timeout后结束。

get(block[, timeout])

将队列数据取出。

参数

block:可选参数,默认值为True。当值为True时,阻塞调用(当试图向空栈取出数据时,阻塞调用,直到有栈内有数据,或timeout秒后结束。

timeout:阻塞超时,当timeout>0时,阻塞调用timeout后结束。

empty()

判断队列是否为空,空返回True,非空返回False

full()

判断队列是否为满,满返回True,非满返回False

join()

阻塞调用线程,直到队列的所有任务都被处理掉。

只要数据加入队列,未完成的任务数就会增加。当消费者线程调用task_done(),未完成的任务数九会减少。当未完成的任务数降至0,join()解除阻塞。

task_done()

意味着上一个任务处理完成,由队列的消费者线程调用。每一个get()的调用获得一个任务,task_done()调用告诉队列对应的任务已经完成。

FIFO队列(First In First Out)

queue.Queue(maxsize=0)

先进先出队列,当maxsize>0时,队列数据大小限制为maxsize,当maxsize<=0时,大小无限制。

代码:

import queue

q=queue.Queue()

for each in range(5):
	q.put(each)
	
while not q.empty():
	print(q.get())

结果:

0
1
2
3
4

LIFO队列(Last In First Out)

queue.LifoQueue(maxsize=0)

后进先出队列,当maxsize>0时,队列数据大小限制为maxsize,当maxsize<=0时,大小无限制。

代码:

import queue

q=queue.LifoQueue()

for each in range(5):
	q.put(each)
	
while not q.empty():
	print(q.get())

结果:

4
3
2
1
0

优先级队列

queue.PriorityQueue(maxsize=0)

优先级队列,当maxsize>0时,队列数据大小限制为maxsize,当maxsize<=0时,大小无限制。

代码:

import queue

class job():
	def __init__(self,priority,description):
		self.priority=priority
		self.description=description
		
	def __lt__(self,other):
		return self.priority<other.priority
		
q=queue.PriorityQueue()
		
		
q.put(job(10,"priority 10"))
q.put(job(4,"priority 4"))
q.put(job(3,"priority 3"))
q.put(job(1,"priority 1"))

while not q.empty():
	print(q.get().description)

结果:

priority 1
priority 3
priority 4
priority 10

猜你喜欢

转载自blog.csdn.net/hengdawei3087/article/details/80669169
今日推荐