Python模块(包)
Python模块(包)-queue队列
Python模块(包)-queue队列
一,安装queue模块
安装:pip install queue
导入:from queue import Queue,LifoQueue,PriorityQueue
一、队列(Queue)
Python的queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步。
二,常用方法:
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.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号。每个get()调用得到一个任务,接下来task_done()调用告诉队列该任务已经处理完毕。
Queue.join() 实际上意味着等到队列为空,再执行别的操作
代码示例
# 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.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号。每个get()调用得到一个任务,接下来task_done()调用告诉队列该任务已经处理完毕。 # Queue.join() 实际上意味着等到队列为空,再执行别的操作 from queue import Queue,LifoQueue,PriorityQueue q = Queue(maxsize=10) lq = LifoQueue(maxsize=5) pq = PriorityQueue() q_list = ['a','b','c','d','e'] for i in q_list: q.put(i) lq.put(i) pq.put(i) print(q.qsize()) # 5 print(lq.qsize()) # 5 print(pq.qsize()) # 5 print(q.empty(),q.full()) # False False print(lq.empty(),lq.full()) # False True print(pq.empty(),pq.full()) # False False print(q.get(),lq.get(),pq.get()) # 取出第一个 a e a print(q.get(),lq.get(),pq.get()) # 取出第二个 b d b print(q.get(True, 5)) # get(self, block=True, timeout=None) ,True就是阻塞等待,5是超时5秒 print(q.get(False)) # False就是阻塞不等待 print('=====') print(q.qsize()) # 1 前面已经取出四个了,所以只剩一个了 print(q.get()) # e print('--------') # q.task_done() # q.join() print('完成') # lq.join() print('=============') qq=Queue() aa_list = ['a','b'] bb_list = ['c','d'] qq.put(aa_list) print(qq.qsize()) # 1 说明列表相当于一个整体 qq.put(bb_list) print(qq.qsize()) # 2 print(qq.get()) # ['a', 'b'] print(qq.get()) # ['c','d']
最后修改:2021年4月1日 20:35