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 队列对比展示

队列Queue FIFO先进先出 栈Stack FILO先进后出

使用两个堆栈 Python 实现一个队列

python 进程间通信 消费者生产者模型 队列

栈和堆