Python 工具类之 Queue 组件详解用法
Queue 组件是 Python 中线程安全的队列类,用于在多线程或多进程之间表示通讯机制。
如何使用 Queue 组件
首先需要引入 queue 模块:
import queue
创建一个队列实例
queue_instance = queue.Queue()
创建一个队列实例 queue_instance
,由于 queue.Queue() 默认会创建一个无限大的队列,因此需要注意队列的大小。
向队列中添加元素
queue_instance.put("element")
向队列中添加一个元素。
从队列中获取元素
queue_instance.get(timeout=30)
从队列中取出一个元素,如果队列为空,会立即阻塞,直到队列中有元素或达到 timeout 时间。
判断队列是否为空
queue_instance.empty()
如果队列为空,返回 True,否则返回 False。
获取队列的长度
queue_instance.qsize()
获取队列中元素的数量。
示例
示例 1:生产者-消费者模型
import queue
import threading
import time
q = queue.Queue()
def producer():
for i in range(10):
print("Producing", i)
q.put(i)
time.sleep(1)
def consumer():
while True:
item = q.get()
if item is None:
break
print("Consuming", item)
time.sleep(2)
t1 = threading.Thread(target=producer)
t2 = threading.Thread(target=consumer)
t1.start()
t2.start()
t1.join()
q.put(None)
t2.join()
以上代码演示了生产者-消费者模型的使用,其中生产者不断向队列中添加元素,消费者不断从队列中取出元素并进行处理。
示例 2:在多线程中使用 Queue 组件
import queue
import threading
q = queue.Queue()
def worker():
while True:
item = q.get()
if item is None:
break
print(item)
q.task_done()
for i in range(4):
t = threading.Thread(target=worker)
t.start()
for i in range(10):
q.put(i)
q.join()
for i in range(4):
q.put(None)
for t in threading.enumerate():
if t is not threading.current_thread():
t.join()
以上代码演示了在多线程中使用 Queue 组件,其中创建了 4 个线程来处理队列中的元素。需要注意的是,使用 queue.Queue.join()
可以保证所有元素都被处理后再结束程序。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 工具类之Queue组件详解用法 - Python技术站