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()
queue
原文地址:https://www.cnblogs.com/menkeyi/p/7115616.html