多线程利器-队列(queue)

#队列有3中模式,先进先出,先进后出,优先级
1:先进先出
import queue
q = queue.Queue()     #默认是先进先出
q.put(12)
q.put('jack')
q.put({'name':'ok'})
while True:
data = q.get()
print(data)
----------------------------------------------------->

q = queue.Queue(maxsize = 2)     #队列数据只能存三个数据
q.put(12)
q.put('jack')
q.put([1,2,3])
q.put({'name':'ok'}) #存满三个数据超出后;就卡死在这,除非有另外一个线程取前面的数据

while True:
data = q.get()
print(data)

------------------------------------------------------------>
q = queue.Queue()
q.put(12)
q.put('jack')
q.put([1,2,3])
q.put({'name':'ok'},False) #False 队列满了提示报错

while True:
data = q.get(block=False) #False 队列取完提示报错
print(data)
-------------------------------------------------->
2:先进后出(LifoQueue)
q = queue.LifoQueue()
q.put(12)
q.put('jack')
q.put([1,2,3])

while True:
data = q.get()
print(data)

--------------------------------------------->
3:优先级(PriorityQueue);谁小谁现出
q = queue.PriorityQueue()

q.put([3,12]) #列表第一个元素代表优先级
q.put([2,'jack'])
q.put([5,[1,2,3]])

while True:
data = q.get()
print(data)

其他一些操作:
此包中的常用方法(q = Queue.Queue()):
q.qsize() 返回队列的大小
q.empty() 如果队列为空,返回True,反之False
q.full() 如果队列满了,返回True,反之False
q.full 与 maxsize 大小对应
q.get([block[, timeout]]) 获取队列,timeout等待时间
q.get_nowait() 相当q.get(False)
非阻塞 q.put(item) 写入队列,timeout等待时间
q.put_nowait(item) 相当q.put(item, False)
q.task_done() 在完成一项工作之后,q.task_done() 函数向任务已经完成的队列发送一个信号
q.join() 实际上意味着等到队列为空,再执行别的操作
 




 

猜你喜欢

转载自www.cnblogs.com/ajaxa/p/9134423.html