线程queue
Python3中的所有模块名都变成了纯小写了。
- 进程的队列不能给线程用
- 线程间通信使用线程queue
- 不通过其他机制线程间的通信,但是要考虑锁的问题,用了队列就不用考虑锁的问题了
- 对于程序的不同组件,在现实中分布式的运行在多台机器效率更好,这些机器间为了仍然能够协调合作需要通信,就将通信队列组件也部署在一台机器上,让其他别的机器都连着这台机器就可以实现间接通信了。这样一来效率提高,稳定性也提高,只有一台机器坏了并不影响其他机器上的组件,但是队列所在机器坏了就不好办了,所以队列使用集群实现。
- 以后不管是进程还是线程都基于队列进行通信
- 用本机上封装好的一些特殊功能时,使用本地的进程queue和线程queue
队列先进先出
#线程queue
import queue
q=queue.Queue(3) #队列 先进先出 queue模块还有其他概念
q.put(1)
q.put(2)
q.put(3)
print(q.get())
print(q.get())
print(q.get())
#和进程queue一样 还有 q.put_nowait()和q.put(4,block=False),q.put(4,block=True,timeout=3)
结果:
1
2
3
堆栈:后进先出
s=queue.LifoQueue(3)
s.put(4)
s.put(5)
s.put(6)
print(s.get())
print(s.get())
print(s.get())
结果
6
5
4
优先级队列
f=queue.PriorityQueue(3)
f.put((10,'a')) #数字最小的先出来,数字越小优先级越高
f.put((-3,'b'))
f.put((100,'c'))
print(f.get())
print(f.get())
print(f.get())
结果
(-3, 'b')
(10, 'a')
(100, 'c')