首页 > 代码库 > python队列
python队列
先入先出队列:
import queue q = queue.Queue(10) # 10为队列长度 for i in range(5): q.put(i, block=False) # block=False为非阻塞,默认为阻塞 print(q.qsize()) # 队列元素个数 q.put(‘hehe‘, timeout=2) # 超时时间为2秒 print(q.full()) # 判断队列是否满了 print(q.maxsize) # 队列最大个数 while not q.empty(): # 队列是否为空,不为空就取数据 print(q.get()) # get时也是默认阻塞的,其他参数与put相同 q.task_done() # 阻塞进程,当队列中任务执行完毕后,不再阻塞。表示任务执行完毕 q.join()
task_done()意味着之前入队的一个任务已经完成。由队列的消费者线程调用,每一个get()调用得到一个任务,接下来的task_done()调用告诉队列该任务已经执行完毕
如果当前一个join()正在阻塞,它将在队列中的所有任务都处理完时恢复执行(即get后又task_done)
常用方法:
q.qsize() 返回队列的大小
q.empty() 如果队列为空,返回True,反之False
q.full() 如果队列满了,返回True,反之False
q.full 与 maxsize 大小对应
q.get([block[, timeout]]) 获取队列,timeout等待时间
q.get_nowait() 相当q.get(False)
非阻塞 q.put(item) 写入队列,timeout等待时间
q.put_nowait(item) 相当q.put(item, False)
q.task_done() 在完成一项工作之后,q.task_done() 函数向任务已经完成的队列发送一个信号
q.join() 实际上意味着等到队列为空,再执行别的操作
先入后出队列(FILO):
import queue q = queue.LifoQueue() for i in range(10): q.put(i) while not q.empty(): print(q.get())
优先级队列:
优先级队列 import queue q = queue.PriorityQueue() q.put((1, ‘cable‘)) q.put((2, ‘caocao‘)) q.put((3, ‘sunquan‘)) q.put((2, ‘liubei‘)) # 优先级相同的时候,先入者为先 while not q.empty(): print(q.get())
双向队列:
双向队列 import queue q = queue.deque() q.append(123) q.append(456) q.appendleft(‘hehe‘) print(q.pop()) print(q.popleft())
python队列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。