使用Queue()实现任务队列的简单示例
发布时间:2023-12-28 10:10:47
Queue()是Python中的一个线程安全的队列类,用于在多线程之间共享数据。
在实际应用中,任务队列常用于实现生产者-消费者模式,其中生产者线程向队列中添加任务,消费者线程从队列中取出任务并执行。下面是一个简单的示例,展示如何使用Queue()实现任务队列。
import threading
from queue import Queue
# 任务类
class Task:
def __init__(self, task_id):
self.task_id = task_id
def execute(self):
print(f"Task {self.task_id} executed")
# 生产者线程
def producer(queue):
# 生产10个任务
for i in range(10):
task = Task(i)
queue.put(task)
print(f"Producer: Task {task.task_id} produced")
# 添加None到队列中,用于告知消费者任务已经全部生产完成
queue.put(None)
# 消费者线程
def consumer(queue):
while True:
task = queue.get()
if task is None:
# 遇到None,任务全部执行完成,退出
break
task.execute()
queue.task_done()
# 创建任务队列
queue = Queue()
# 创建生产者和消费者线程
producer_thread = threading.Thread(target=producer, args=(queue,))
consumer_thread = threading.Thread(target=consumer, args=(queue,))
# 启动线程
producer_thread.start()
consumer_thread.start()
# 等待生产者和消费者线程执行完成
producer_thread.join()
consumer_thread.join()
print("All tasks executed")
在以上示例中,首先定义了一个Task类,其中包含一个execute()方法,用于执行任务。producer()函数为生产者线程函数,循环创建10个任务并将其添加到队列中。创建完毕后,添加None到队列中,表示任务全部生产完成。consumer()函数为消费者线程函数,循环从队列中取出任务并执行。当遇到None时,表示全部任务执行完成,退出循环。
创建任务队列时,使用Queue()创建一个新的实例。
创建生产者和消费者线程后,使用start()方法启动线程,并使用join()方法等待线程执行完成。
最后,打印"All tasks executed"表示任务队列中的所有任务都已经执行完成。
通过以上示例,我们可以看到使用Queue()实现任务队列的简单示例。在实际应用中,我们可以根据需要进行扩展,并添加适当的同步机制以确保多线程之间的数据安全。
