queue模块

1、queue模块--队列

  queue模块提供了一个先进先出的队列Queue

  queue.Queue(maxsize=0)

  创建FIFO 队列,返回Queue对象

  maxsize 小于等于0,队列长度没有限制

  Queue.get(block=True, timeout= None)

  从队列中移除元素并返回 这个元素

  block 为阻塞,timeout 为超时

  如果block为True, 是阻塞,timeout 为None 就是一直阻塞

  如果block 为True,但是timeout有值,就阻塞到一定秒数排除Empty异常

  如果block 为False, 是非阻塞,timeout此时将没有意义,要么返回一个元素,要么抛出Empty异常

  Queue.get_nowait()等价于get(False),也就是说要么成功返回一个元素,要么抛出empty异常,但是queue的这种阻塞效果,需要多线程的时候演示

  Queue.put(item, block=True, timeout=None) 把一个元素加入到队列中去

  block=True, timeout = None ,一直阻塞知道有空位放元素

  block=True, timeout = 5,阻塞5秒就抛出Full异常

  block=False, timeout 失效,立即放回,能塞进去就塞,不能则返回抛出Full异常

  Queue.put_nowait(item)等价 put(item,False),也就是能塞进去,就塞,不能则返回抛出Full异常

 1 # 不支持索引!!
 2 from queue import Queue
 3 
 4 q = Queue()
 5 print(q.empty()) # 没有数据,返回 True
 6 print(q.full()) # 不是满的 ,返回 False
 7 
 8 print(q.get())# 此时 一直处于等的状态 永久的等
 9 print(q.get(block=True, timeout=None))# block表示默认,阻塞, timeout默认一直阻塞
10 
11 q.get(True, 5) #等5秒,时间超时候还没有拿到就抛 empty异常
12 q.get(False, None) # 不等,立即抛异常
13 q.get(False, 5) #不等,所以5是没有作用的
14 q.get_nowait()#  不等
15 
16 q.put() # 往里边塞数据
17 q.put() # 放地址的引用, 所以如果放4个数字,q.get(range(4)) 这样是不对的
18 
19 q.put_nowait()   # 如果满了,会抛full异常

  qsize()??

为什么要坚持,想一想当初!
原文地址:https://www.cnblogs.com/JerryZao/p/9630958.html