python多线程----queue模块

#首先要知道,python的列表是不安全的,
#因为它不符合原子性,对列表中的某个元素进行操作有两部,先取到元素,然后改变值


# queue模块
# 首先说一下queue模块
# 这个模块其实就是实现了一个叫队列的数据结构,但是它是线程安全的
# 而且严格来说不只是队列,还能实现栈.

import queue

# 先进先出,也就是传统意义上的队列,也就是滑滑梯
q = queue.Queue(2)  # 在构造的时候可以给定队列的最大容量,不给的话默认是没有上限
"""
如果队列当前已满且 block 为 True,put() 方法就使调用线程暂停,直到空出一个数据单元。
如果block为 False,put 方法将引发 Full 异常
"""
q.put(1)
q.put(2)
"""
调用队列对象的 get() 方法从队头删除并返回一个项目。可选参数为 block,默认为 True。
如果队列满了且 block 为 True,get() 就使调用线程暂停,直至有项目可用。
如果队列满了且 block 为 False,队列将引发 Empty 异常。
常用的方法是先判断一个队列是否为空,如果不为空则取值。"""
print(q.get())
print(q.qsize())  # 注意,在取出一个元素后,队列显示为只剩下一个元素了
# 后进先出队列,也就是填弹夹
q1 = queue.LifoQueue()
q1.put(1)
q1.put(2)
print(q1.get())

#full()和empty()判断队列是否已满/空了

# 优先级队列
# 当优先级相同时,按放数据顺序取数据
q2 = queue.PriorityQueue()
q2.put((1, "本元素优先级为1"))
q2.put((2, "本元素优先级为2"))
print(q2.get())  # (1, '本元素优先级为1')

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值