队列(queue)特点是先进先出(First in First out)。
引入和创建
import queue
q = queue.Queue()
常用方法
queue.qsize() 返回队列的大小
queue.empty() 如果队列为空,返回True,反之False
queue.full() 如果队列满了,返回True,反之False
queue.full 与 maxsize 大小对应
queue.get([block[, timeout]])获取队列,timeout等待时间
queue.get_nowait() 相当queue.get(False)
queue.put(item) 写入队列,timeout等待时间
queue.put_nowait(item) 相当queue.put(item, False)
queue.task_done() 在完成一项工作之后,queue.task_done()函数向任务已经完成的队列发送一个信号
queue.join() 实际上意味着等到队列为空,再执行别的操作
# 入队,在队列尾增加数据, block参数,可以是True和False 意思是如果队列已经满了则阻塞在这里,
# timeout 参数 是指超时时间,如果被阻塞了那最多阻塞的时间,如果时间超过了则报错。
q.put(13,block=True,timeout=5)
q.task_done()意味着之前入队的一个任务已经完成。由队列的消费者线程调用。每一个get()调用得到一个任务,接下来的task_done()调用告诉队列该任务已经处理完毕。如果当前一个join()正在阻塞,它将在队列中的所有任务都处理完时恢复执行(即每一个由put()调用入队的任务都有一个对应的task_done()调用)。
优先队列:
怎么出的规则不和进入的顺序有关,是和他的优先级有关,当入队的时候我们就会根据这个数据的优先级进行排序,优先级高的就排在前面,然后出队的时候就是先出队。
例:
import queue
q=queue.PriorityQueue(4)
双向队列:
两端都可以进同时也可以出
例:
import queue
q=queue.deque(3)
# 初始化一个双向队列
q.append(12)
# 右边进
q.pop()
# 右边出
q.appendleft(34)
# 左边进
q.popleft()
# 左边出