queue
queue模块
Queue 就是对队列,它是线程安全的。线程之间不会有征用的问题
import queue
q = queue.Queue(maxsize=0) # 构造一个先进显出队列,maxsize指定队列长度,为0 时,表示队列长度无限制。q.join() # 等到队列为kong的时候,在执行别的操作
q.qsize() # 返回队列的大小 (不可靠是因为在你获取的那个时间点上是OK的,但是同时可能有往队列中扔消息或者取消息)
q.empty() # 当队列为空的时候,返回True 否则返回False (不可靠)
q.full() # 当队列满的时候,返回True,否则返回False (不可靠)
q.put(item, block=True, timeout=None) # 将item放入Queue尾部,item必须存在,可以参数block默认为True,表示当队列满时,此时会阻塞,为False时为非阻塞,此时如果队列已满,会引发queue.Full 异常。 可选参数timeout,表示 会阻塞设置的时间,过后,如果队列无法给出放入item的位置,则引发 queue.Full 异常
q.get(block=True, timeout=None) # 移除并返回队列头部的一个值,可选参数block默认为True,表示获取值的时候,如果队列为空,则阻塞,为False时,不阻塞,若此时队列为空,则引发 queue.Empty异常。 可选参数timeout,表示会阻塞设置的时候,过后,如果队列为空,则引发Empty异常。
q.put_nowait(item) # 等效于 put(item,block=False) 即使队列满了也不会阻塞
q.get_nowait() # 等效于 get(item,block=False) 即使队列为空获取的时候也不会阻塞
1 #!/usr/bin/env python 2 import Queue 3 import threading 4 5 6 message = Queue.Queue(10) 7 8 9 def producer(i): 10 while True: 11 message.put(i) 12 13 14 def consumer(i): 15 while True: 16 msg = message.get() 17 18 19 for i in range(12): 20 t = threading.Thread(target=producer, args=(i,)) 21 t.start() 22 23 for i in range(10): 24 t = threading.Thread(target=consumer, args=(i,)) 25 t.start()