队列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)
# 队列: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()
四、q.join()
当队列为空的时候,才能执行别的操作。若队列中存储的是任务,只有当当前任务全部执行,列表为空时,才可以进行后续操作。
五、其他
由于在多线程操作中,队列经常处于变化中,不可靠,所以如下几个方法不常用。
(一)q.qsize() 队列大小
(二)q.empty() 队列是否为空
(三)q.full() 队列是否为满
浙公网安备 33010602011771号