当前位置: 移动技术网 > IT编程>脚本编程>Python > Python3线程中应用队列讲解

Python3线程中应用队列讲解

2018年04月03日  | 移动技术网IT编程  | 我要评论

丹东中考成绩查询,班门弄斧,怪侠欧阳德全集下载

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网