欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python3线程中应用队列讲解

程序员文章站 2022-03-30 15:34:36
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

():>():>