1. Queue 简介
- Queue 对象实现一个 fifo 队列(其他的还有 lifo、priority 队列,这里不再介绍);
- Queue 只有 maxsize 一个构造参数,用来指定队列容量,指定为0的时候代表容量无限;
- Queue 底层队列使用管道和锁定实现,另外还需要运行支持线程以便队列中的数据传输到底层管道中。
2. Queue 常用方法
- Queue([maxsize])
-- 创建共享的进程队列;
-- maxsize 是队列中允许的最大项数,0 表示无限;
-- 如果省略此参数,则无大小限制。
q = Queue(maxsize=0) #指定队列大小,0表示无限
-
q.get( [ block [ ,timeout ] ] )
-- 返回 q 中的一个项目;
-- 如果 q 为空,此方法将阻塞,直到队列中有项目可用为止;
-- block 用于控制阻塞行为,默认为 True;
-- 如果 block 设置为 False,将引发 Queue.Empty 异常(定义在 Queue 模块中);
-- timeout 是可选超时时间,用在阻塞模式中;
-- 如果在制定的时间间隔内没有项目变为可用,将引发 Queue.Empty 异常; -
q.qsize()
-- 返回队列中目前项目的数量;
-- 此函数的结果并不可靠,因为在返回结果和在稍后程序中使用结果之间,队列中可能添加或删除了项目;
-- 在某些系统上,此方法可能引发 NotImplementedError 异常; -
q.put(item [, block [,timeout ] ] )
-- 将 item 放入队列;
-- 如果队列已满,此方法将阻塞至有空间可用为止;
-- block 控制阻塞行为,默认为 True;
-- 如果 block 设置为 False,将引发 Queue.Empty 异常(定义在 Queue 库模块中);
-- timeout 指定在阻塞模式中等待可用空间的时间长短,超时后将引发Queue.Full异常; -
q.empty()
-- 判断队列是否为空;
-- 如果调用此方法时 q 为空,返回 True;
-- 如果其他进程或线程正在往队列中添加项目,结果是不可靠的;
-- 也就是说,在返回和使用结果之间,队列中可能已经加入新的项目; -
q.full()
-- 判断当前队列是否满了;
-- 如果调用此方法时 q 已满,返回True;
-- 如果其他进程或线程正在往队列中添加项目,结果是不可靠的;
-- 也就是说,在返回和使用结果之间,队列中可能已经加入新的项目; -
q.task_done()
-- 接受消息的线程调用该函数,来说明消息对应的任务是否已经完成; -
q.join()
-- 等待队列为空,再执行别的操作; -
q.get_nowait( )
-- 同q.get(False)方法。
网友评论