欢迎访问宙启技术站
智能推送

使用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()实现任务队列的简单示例。在实际应用中,我们可以根据需要进行扩展,并添加适当的同步机制以确保多线程之间的数据安全。