高端网站建设大概多少费用,云南昆明网站建设价格,中国搜索引擎份额排行,ps怎样做网站详情页一、Queue模块的知识点思维导图 二、Queue模块常用函数介绍
queue模块是内置的#xff0c;不需要安装直接导入就可以了。
#xff08;1#xff09;创建一个Queue对象
import queue# 创建一个队列实例
q queue.Queue(maxsize20) # 可选参数#xff0c;默认为无限大不需要安装直接导入就可以了。
1创建一个Queue对象
import queue# 创建一个队列实例
q queue.Queue(maxsize20) # 可选参数默认为无限大
2入队
# 导入Python标准库中的queue模块该模块提供了线程安全的队列数据结构
import queue# 创建一个Queue对象可以理解为初始化一个队列参数maxsize默认为0表示队列大小无限制
q queue.Queue()# 使用for循环将数字0到9依次放入队列中
# put方法用于将元素放入队列尾部即执行入队操作
for i in range(10):q.put(i) # 这里每执行一次就将i0-9作为一个元素放入队列中# 此时队列q中按照先进先出FIFO原则存储了数字0-9
3出队
# 导入Python内置的queue模块其中包含线程安全的队列数据结构
import queue# 创建一个Queue对象即初始化一个空队列
q queue.Queue()# 使用for循环将0到9这10个整数依次入队
# put方法将元素添加到队列的末尾
for i in range(10):q.put(i) # 每次循环都将i作为元素放入队列中4判空
# 导入Python内置的queue模块其中包含线程安全的队列数据结构
import queue# 创建一个Queue对象即初始化一个空队列
q queue.Queue()# 使用for循环将0到9这10个整数依次入队
# put方法将元素添加到队列的末尾
for i in range(10):q.put(i) # 每次循环都将i作为元素放入队列中# 使用while循环检查队列是否为空
# 当队列不为空时持续执行循环体内的操作
while not q.empty(): # 使用get方法从队列中取出并移除一个元素# 默认情况下get方法会阻塞直到有元素可用除非设置了非阻塞模式data q.get() # 打印从队列中取出的元素print(data)# 当队列为空时while循环结束
# 此时所有之前入队的整数0-9会被按照先进先出FIFO的原则依次出队并打印
5判满
import queue# 初始化一个容量为5的队列
q queue.Queue(maxsize5)# 入队操作
for i in range(10):# 在入队前检查队列是否已满if q.full():print(Queue is full, cannot insert more items.)else:q.put(i)# 若队列已满可以选择等待一段时间后重试或其他处理策略if q.full():time.sleep(1) # 假设休眠一秒后重试continuewhile not q.empty():data q.get()print(data)
6获取队列长度
import queue# 创建一个队列
q queue.Queue()# 将10个元素放入队列
for i in range(10):q.put(i)# 打印队列长度
print(fQueue size before processing: {q.qsize()})# 处理队列中的元素同时打印队列长度
while not q.empty():data q.get()print(fProcessing element: {data}, current queue size: {q.qsize()})# 在处理过程中每次从队列中取出一个元素后队列长度都会减一
7task_done() 和 unfinished_tasks
import queue
import threading# 创建一个队列
q queue.Queue()# 生产者线程将任务放入队列
def producer():for i in range(10):q.put(i)print(fProducer added task: {i})# 消费者线程从队列中取出并处理任务
def consumer():while True:task q.get() # 获取任务print(fConsumer started working on task: {task})# 这里模拟任务处理过程# 实际应用中此处应替换为实际的任务处理逻辑process_task(task)# 任务处理完毕调用 task_done()q.task_done()print(fConsumer finished task: {task})# 检查队列是否为空且所有任务都已经完成if q.empty() and q.unfinished_tasks 0:print(All tasks completed, exiting consumer.)break# 创建并启动生产者线程
p threading.Thread(targetproducer)
p.start()
p.join() # 确保生产者线程完成任务# 创建并启动消费者线程
c threading.Thread(targetconsumer)
c.start()
c.join() # 等待消费者线程处理完所有任务并退出# 由于消费者线程在所有任务完成后退出所以在此处不需要再次检查队列状态
8join
import queue
import threading# 创建一个队列
q queue.Queue()# 生产者线程将任务放入队列
def producer():for i in range(10):q.put(i)print(Producer has added all tasks.)# 消费者线程从队列中取出并处理任务
def consumer():while True:task q.get() # 获取任务print(fConsumer started working on task: {task})# 这里模拟任务处理过程# 实际应用中此处应替换为实际的任务处理逻辑process_task(task)# 任务处理完毕调用 task_done()q.task_done()print(fConsumer finished task: {task})# 检查队列是否为空if q.empty():print(No more tasks in the queue.)break# 创建并启动生产者线程
p threading.Thread(targetproducer)
p.start()
p.join() # 确保生产者线程完成任务添加# 创建并启动消费者线程
c threading.Thread(targetconsumer)
c.start()# 主线程等待所有任务完成
q.join() # 阻塞主线程直到所有从队列中取出的任务都被标记为完成print(All tasks have been processed and marked as done.)