队列queue是典型的生产者、消费者模式,按从前往后的顺序、先进先出。

  一、创建队列

  下载安装第三方模块queue,然后导入,并创建队列对象。

  import queue

q = queue.Queue(maxsize = 0)

可通过maxsize设置队列长度,默认值0表示队列无限长。

  二、存放数据到队列

q.put(item,block = True,timeout = None)

  item:放入queue里的内容,从尾部开始放

block:默认True,如果队列是满的,阻塞等待队列空出位置;可设置为False,队列满时抛出异常。

 timeout:当block为True时,设置阻塞时间,过时抛出异常;默认一直等待。

q.put_nowait(item) 

不阻塞,队列满时抛出异常。等效于:q.put(item,block =False)

  三、从队列取数据

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

block:默认True,如果队列是空的,阻塞等待队列里的内容;可设置为False,队列空时抛出异常。

 timeout:当block为True时,设置阻塞时间,过时抛出异常;默认一直等待。

q.get_nowait()

不阻塞,队列为空时抛出异常。等效于:q.get(block = False)

python queue模块下载 python queue安装_等待队列

python queue模块下载 python queue安装_等待队列_02

# 队列:queue
# 生产者、消费者模式
import queue
import threading

def put(q,i):
    print('put',i)
    q.put(i,)

def get(q):
    ret = q.get()
    print('get',ret)

q = queue.Queue(5)

for i in range(20):
    t = threading.Thread(target=put,args=(q,i,))
    t.start()

for i in range(5):
    t = threading.Thread(target=get,args=(q,))
    t.start()

View Code

q.join()

当队列为空的时候,才能执行别的操作。若队列中存储的是任务,只有当当前任务全部执行,列表为空时,才可以进行后续操作。

  五、其他

  由于在多线程操作中,队列经常处于变化中,不可靠,所以如下几个方法不常用。

  (一)q.qsize()   队列大小

  (二)q.empty()      队列是否为空

  (三)q.full()     队列是否为满