Python 多线程编程-09 Queue 模块框架

目   录

1. 什么是线程安全?

2. Python Queue 模块

2.1 Python Queue 实现的队列类

2.2 Python Queue 提供的类和函数

2.2.1 提供的类 

2.2.2 提供的异常 Exception  

2.2.3 提供的函数


Python 多线程编程目录

Python 多线程编程-01-threading 模块初识

Python 多线程编程-02-threading 模块-锁的使用 

Python 多线程编程-03-threading 模块 - Condition

Python 多线程编程-04-threading 模块 - Event

Python 多线程编程-05-threading 模块 - Semaphore 和 BoundedSemaphore

Python 多线程编程-06-threading 模块 - Timer 

Python 多线程编程-07-threading 模块 - Barrier

Python 多线程编程-08-threading 复习

 

1. 什么是线程安全?

      在前面 threading 模块中的学习中,我们谈论了全局解释锁 GIL、Lock/RLock 等,其实都是为了保证多线程使用中的线程安全。在并发场景中,如果线程不安全,多个线程同时进行同一个资源文件的操作,可能带来不可预知的风险。

        此外,threading.Condtion、threading.Semaphore/BoundedSemaphore、threading.Event 、还有 threading.Barrier 小节中提到的线程等待列表,当同时唤醒线程等待列表中的多个列表时候,有可能出现不同的线程被唤醒,这时候结果也是不确定的。如果想用确定的线程列表怎么办,我们来看看 Queue 模块吧。

2. Python Queue 模块

2.1 Python Queue 实现的队列类

        Python Queue 模块提供了同步的、线程安全的队列类, 这些队列都实现了锁原语,能够在多线程中直接使用。当必须在多个线程之间安全地交换信息时,它在线程编程中特别有用。

Queue 模块中实现的队列类有下面四种:

    1、FIFO 队列,先入先出队列,其添加的第一个任务是第一个检索的任务;

    2、LIFO 队列,后入先出队列,其最近添加的任务是第一个检索的(像堆栈);

    3、Priority 队列,其条目将按照计算的优先级值排序,并首先检索优先级最低值的条目。

               4、Python 3 中新加双向队列,可以提供在队列两端进行的数据访问优化操作。

2.2 Python Queue 提供的类和函数

2.2.1 提供的类 

        queue 模块中最主要的是 Queue 类,LifoQueue、PriorityQueue 都继承了 Queue 类;deque、SimpleQueue 则继承自 builtins.object 。

1)     Queue.Queue(maxsize = 0 )

  FIFO 队列的构造函数。 maxsize是一个整数,用于设置可以放入队列的项目数的上限。达到此大小后,将不再延长队列长度,直到消耗队列项。如果 maxsize 小于或等于0,则队列大为无限队列。

        相关方法和属性,在后续章节详细描述。

2)     Queue.LifoQueue(maxsize = 0 )

  LIFO 队列的构造函数。 maxsize 含义同Queue.Queue 中的maxsize 。

        相关方法和属性,在后续章节详细描述。

3)     Queue.PriorityQueue(maxsize = 0 )

  Priority 队列的构造函数。 maxsize 含义同Queue.Queue 中的maxsize 。

        相关方法和属性,在后续章节详细描述。

4)     Queue.duque ([iterable[, maxlen]])

  双向队列的构造函数。

        相关方法和属性,在后续章节详细描述。

5)     Queue.SimpleQueue()

  简单、无限、可重入的 FIFO 队列构造函数。

        相关方法和属性,在后续章节详细描述。

6)     Queue.threading()

   模拟 Java 线程模型子集的线程模块。

        相关方法和属性,在后续章节详细描述。

2.2.2 提供的异常 Exception  

1)     Queue.Empty

  在 queue 对象为空时调用 get*()  方法时引发异常。

2)     Queue.Full

  在 queue 对象已满时调用 put*() 时引发异常。

2.2.3 提供的函数

1)     heappop(heap, /)

        模块_heapq 中的内置函数 heappop,弹出 heap 中的最小项,维持 heap 稳定不变。

2)     heappush(heap, item, /)

    模块_heapq 中的内置函数 heapppush,推入新项进入 heap 中,维持 heap 稳定不变。
3)     time()

       模块 time 中的内置函数 monotonic。

'''

要是大家觉得写得还行,麻烦点个赞或者收藏吧,想个博客涨涨人气,非常感谢!

'''

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南野栀子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值