Python 内置队列 FIFO vs FILO 队列对比展示
Posted 雷学委
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 内置队列 FIFO vs FILO 队列对比展示相关的知识,希望对你有一定的参考价值。
正式的Python专栏第63篇,同学站住,别错过这个从0开始的文章!
之前的多线程解决线程安全的时候,学委展示了两篇关于队列的 带你验收一款线程安全的队列 和使用队列改造转账场景线程安全问题
对比一下FIFO 和 FILO
首先队列这个库里面的queue.Queue类就是一个典型的先进先出队列。
下面写了一些祝福语,使用Queue这个类来编写demo,开头创建一个队列对象q。
后续不断判断队列是否空(q.empty()), 然后通过q.get()调用获取队列元素。
写了三句祝福语,加上序号,先进先出队列会按照元素放入队列的顺序,依次取出队列元素。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2022/2/2 12:43 下午
# @Author : LeiXueWei
# @CSDN/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : lifoqdemo.py
# @Project : hello
import queue
import threading
import time
q = queue.Queue(3) # 虎年就设置一个三吧
q.put("一祝各位朋友们新年快乐")
q.put("二祝各位朋友们身体健康")
q.put("三祝各位朋友们虎年大吉")
def more_blessing():
count = 0
while count < 3:
print("wait....")
count += 1
q.put("其他的祝福%s" % count)
def get_from_q():
max_try = 10
count = 0
while count < max_try:
count += 1
time.sleep(0.5)
while not q.empty():
print("%s ㊗️:%s" % (threading.current_thread().name, q.get()))
threading.Thread(target=get_from_q, name="学委给朋友们拜年了").start()
threading.Thread(target=more_blessing, name="送更多的祝福").start()
这里有3个线程,主线程放入3个祝福,其次是一个线程再追加3个祝福,还有一个线程负责输出队列的元素。
先复制上面的代码直接运行,我们可以查看运行结果:
然后我们可以把队列的类换成下面的LifoQueue队列:
lifoq = queue.LifoQueue(3) # 虎年就设置一个三吧
从这个输出结果,我们可以看到后进后出的队列,输出祝福的代码是后面的先输出的。
改为后进先出队列,我们在取出队列元素的同时,如果放入新元素,那么输出结果肯定会受到影响。
因为总是Lifo队列每次总是取出最后一个元素。
所以,如果在此运行上面的代码,我们看到的输出又不太一样了。
总结
通过以上队列,我们可以非常直观了解到两款队列的差异。
后进先出队列,很像超市货柜,后面放的物品,先被消费者看到。
先进先出队列,就像大家排队体检,排队打饭一样。肯定是先到的先安排。
喜欢Python的朋友,请关注学委的 Python基础专栏 or Python入门到精通大专栏
创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖持续学习持续开发,我是雷学委!
编程很有趣,关键是把技术搞透彻讲明白。
欢迎关注微信,点赞支持收藏!
以上是关于Python 内置队列 FIFO vs FILO 队列对比展示的主要内容,如果未能解决你的问题,请参考以下文章
Python 内置队列 FIFO vs FILO 队列对比展示
Python 内置队列 FIFO vs FILO 队列对比展示