欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

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

时间:2023-05-20

目   录

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。

'''

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

'''

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。