Python3-线程中应用队列

16 篇文章 0 订阅
14 篇文章 0 订阅
#生产者与消费者模式
'''
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 i<count:
#     print(q2.get())
#     i += 1
#优化代码,不一定改变循环变量的值

while i<q2.qsize():
    print(q2.get())


print('~~~~~~~~~~~~~~`')
#后进先出队列
q3=LifoQueue()
q3.put((1,"d1")) #q3.put(1,1)添加的不是容器
q3.put((2,"d2"))
q3.put((-1,"d3"))
q3.put((0,"d4"))
i=0
while i<q3.qsize():
    print(q3.get())
 

/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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值