做企业网站有什么好处2022年最近一周新闻大事
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()
:确保所有任务都执行完毕,并且队列中没有未处理的任务。