顺德 网站设计海珠做网站公
queue.Queue 是 Python 中的线程安全队列,适合用于多线程或多进程环境中进行任务和数据的共享。queue.Queue 提供了 FIFO(先进先出)队列的实现,并包含线程锁机制以保证在多线程环境下数据的安全性。
queue.Queue 的主要方法:
 
-  
put(item, block=True, timeout=None):向队列中添加一个元素。block:如果队列已满,是否阻塞(默认为True)。timeout:如果阻塞,等待的最长时间。
 -  
get(block=True, timeout=None):从队列中取出一个元素。block:如果队列为空,是否阻塞(默认为True)。timeout:如果阻塞,等待的最长时间。
 -  
qsize():返回队列中当前元素的数量(注意,这个方法在某些平台上并不可靠)。 -  
empty():如果队列为空,返回True。 -  
full():如果队列已满,返回True。 -  
put_nowait(item):等同于put(item, block=False),即如果队列满了,不阻塞直接抛出异常。 -  
get_nowait():等同于get(block=False),即如果队列为空,不阻塞直接抛出异常。 
代码示例:
import queue
import threading
import time# 定义一些简单的任务函数
def task1():print("Executing task 1")time.sleep(1)return "Result of task 1"def task2():print("Executing task 2")time.sleep(2)return "Result of task 2"def task3():print("Executing task 3")time.sleep(1.5)return "Result of task 3"# 创建一个 Queue 队列
task_queue = queue.Queue()# 生产者:向队列中放入函数
def producer():task_queue.put(task1)task_queue.put(task2)task_queue.put(task3)task_queue.put(None)  # 用 None 作为结束信号# 消费者:从队列中取出函数并执行
def consumer():while True:task = task_queue.get()  # 获取队列中的任务(即函数)if task is None:  # 检查是否为结束信号breakresult = task()  # 执行函数print(result)    # 打印函数返回值task_queue.task_done()  # 标记任务完成# 创建并启动生产者和消费者线程
producer_thread = threading.Thread(target=producer)
consumer_thread = threading.Thread(target=consumer)producer_thread.start()
consumer_thread.start()# 等待所有任务完成
producer_thread.join()
task_queue.join()  # 等待队列中的所有任务完成
consumer_thread.join()print("All tasks are done.")
 
代码解释:
-  
定义任务函数:
task1,task2,task3是简单的函数,它们各自执行一些操作并返回结果。
 -  
生产者:
producer函数将这些任务函数放入task_queue中,并在最后放入None作为结束信号。
 -  
消费者:
consumer函数不断从task_queue中取出任务(函数),并执行这些任务。通过task()调用函数,然后打印返回值。- 当遇到 
None时,消费者退出循环,表示所有任务已经完成。 
 -  
task_queue.join():确保所有任务都执行完毕,并且队列中没有未处理的任务。 
