Python3线程中应用队列讲解
程序员文章站
2022-07-08 07:52:14
Python3线程中应用队列讲解
#生产者与消费者模式
'''
1.队列
(1)特点:先进先出
(2)python2VSpython3
py...
Python3线程中应用队列讲解
#生产者与消费者模式 ''' 1.队列 (1)特点:先进先出 (2)python2VSpython3 python2: from Queue import queue python3:from queue import Queue join--阻塞动作 blocked--状态 (3)使用 Python的Queue模块中提供了同步的、线程安全的队列类 a.FIFO----(First In First Out)先进先出 b.LIFO----(Last In First Out) 后进先出 c.priority--优先级队列 这些队列都实现了锁原语(可以理解为原子操作,即要么不做,要么就做完),测情况在多线程中直接使用。 可以使用队列来实现线程间的同步。 ''' from queue import Queue from queue import * q=Queue(4)#默认FIFO队列 #判断队列是否为空 print(q.empty()) q.put('d1') q.put('d2') q.put('d3') print(q.qsize())#获取队列大小,当中的任务数量 #判断是否满 print(q.full()) #去数据 print(q.get())#one by one print(q.get()) print(q.get()) # print(q.get(timeout=2))##阻塞,超时,没有数据抛出queue.Empty异常 # print(q.get_nowait())#不要等待,没有数据抛出queue.Empty异常 print('~~~~~~~') #规定队列长度 q1=Queue(maxsize=4) q1.put(1) q1.put(2) q1.put(3) q1.put(4) # q1.put(5)#若队列已经满了,再向里put,默认一直阻塞 # q1.put(5,timeout=2)#等待(阻塞),如果队列已经满,抛queue.Full异常 # q1.put(5,block=False)#不阻塞,硬塞,如果队列已经满,抛queue.Full异常 #c.队列优先级,数字小的优先级高 q2 = PriorityQueue() #添加的是容器,取出的也是容器 q2.put((1,"d1")) #q2.put(1,1)添加的不是容器 q2.put((2,"d2")) q2.put((-1,"d3")) q2.put((0,"d4")) # print(q2.get()) # print(q2.get()) # print(q2.get()) # print(q2.get()) #def get(self, block=True, timeout=None):return item(此item可以是容器) # print(q2.get()) # print(q2.get()) # print(q2.get()) # print(q2.get()) #取里边的数据 i=0 # count=q2.qsize() # while iwhile iwhile i/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Users/apple/PycharmProjects/stage4/thread/t14.py
True
3
False
d1
d2
d3
~~~~~~~
(-1, 'd3')
(0, 'd4')
(1, 'd1')
(2, 'd2')
~~~~~~~~~~~~~~`
(0, 'd4')
(-1, 'd3')
(2, 'd2')
(1, 'd1')
():>():>
Process finished with exit code 0
上一篇: dfgallery 2.0 安装配置