在大多数情况下,我们经常会遇到多线程的情况。线程间的同步和互斥、数据共享等都有可能会引发问题。
在某些情况下,我们需要通过mutex、condition、event等提供的机制和方法来确保同步和互斥的问题,稍有不慎就会陷入死锁或者威胁到线程间数据的安全。
这时候,Queue
给我们提供了一种较为简便的解决方案。
Queue包含三种队列:
- Queue.Queue(maxsize) 指传统意义上常见的队列:先进先出,队长为maxsize
- Queue.LifoQueue(maxsize) 后进先出,数据结构上等同于传统意义上的栈
- Queue.PriorityQueue(maxsize) 优先级队列
需要额外注意的是,Queue模块本身提供了锁原语,模块层面上支持多线程数据共享,是线程安全的。相比collections.deque
,Queue
旨在提供线程安全的解决方法,API操作自带锁原语,而collections.deque
更偏重于数据结构中的队列概念,支持 in
查询。
最后需要提一句的是,Python中的import
机制也是线程安全的,它利用串行引入的机制保证这一点。