PythonStudy——线程中的几种消息队列

Stella981
• 阅读 643

Queue

from queue import Queue,LifoQueue,PriorityQueue

# 队列模块 queue
# 类 Queue
# 类 LifoQueue
# 类 PriorityQueue

# 与进程中的JoinableQueue 使用方式完全一样 但是没有IPC

q = Queue()

# 放入元素  put 方法
q.put("123")
q.put("456")
q.put("789")

# 取出元素  get方法
# 方法一 (基础版取值)
print(q.get())
print(q.get())

# 方法二 (高级版取值)
# 设置阻塞选项block 默认为True  )
# 设置超时选项timeout 默认为None
# 如果在阻塞情况下超时取不到值,则抛出异常
# get(self, block=True, timeout=None)
print(q.get(block=True,timeout=1))

# 告知队列任务完成
q.task_done()
# 优先完成当前队列任务,完成不了阻塞
# q.join()
from queue import Queue,LifoQueue,PriorityQueue

# 队列模块 queue
# 类 Queue
# 类 LifoQueue
# 类 PriorityQueue

# 与进程中的JoinableQueue 使用方式完全一样 但是没有IPC

q = Queue()

# 放入元素  put 方法
q.put("123")
q.put("456")
q.put("789")

# 取出元素  get方法
# 方法一 (基础版取值)
print(q.get())
print(q.get())

# 方法二 (高级版取值)
# 设置阻塞选项block 默认为True  )
# 设置超时选项timeout 默认为None
# 如果在阻塞情况下超时取不到值,则抛出异常
# get(self, block=True, timeout=None)
print(q.get(block=True,timeout=1))

# 告知队列任务完成
q.task_done()
# 优先完成当前队列任务,完成不了阻塞
# q.join()

LifoQueue

from queue import LifoQueue

# last in first out
# 后进先出队列
# 先进后出 模拟堆栈
# 除了顺序以外 其他都一样
lifoqueue = LifoQueue()

lifoqueue.put("123")
lifoqueue.put("456")
lifoqueue.put("789")

print(lifoqueue.get())
print(lifoqueue.get())
print(lifoqueue.get())

PriorityQueue

from queue import PriorityQueue


# 具备优先级的队列
# 可以存储一个可以比较大小的对象
# 比较结果越小的优先级越高
# 自定义的对象,除非定义了__eq__方法,否则是无法进行比较的(不能使用比较运算符) 所以不能存储

# pq = PriorityQueue()
# pq.put("222")
# pq.put("111")
# pq.put("333")
# pq.put(34234)
# TypeError: '<' not supported between instances of 'int' and 'str'
# 需要保证存入优先队列内部的值是同一个类型

# print(pq.get())
# print(pq.get())
# print(pq.get())


# 类的比较运算模拟
class Aa(object):
    # 初始化
    def __init__(self, num):
        self.num = num

    # 小于运算 litter than
    def __lt__(self, other):
        return self.num < other.num, "小于"

    # 小于等于 litter equal
    def __le__(self, other):
        return self.num <= other.num,"小于等于"

    # 大于运算 greater than
    def __gt__(self, other):
        return self.num > other.num, "大于"

    # 大于等于 greater equal
    def __ge__(self, other):
        return self.num >= other.num,"大于等于"

    # 等于运算 equal
    def __eq__(self, other):
        return self.num == other.num,"等于"

    # 不等于 not equal
    def __ne__(self, other):
        return self.num != other.num,"不等于"

print(Aa(100) >= Aa(200))
print(Aa(100) <= Aa(200))
print(Aa(100) > Aa(200))
print(Aa(100) < Aa(200))
print(Aa(100) != Aa(200))
print(Aa(100) == Aa(200))
# (False, '大于等于')
# (True, '小于等于')
# (False, '大于')
# (True, '小于')
# (True, '不等于')
# (False, '等于')
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
RabbitMQ基本示例,轮询机制,no_ack作用
一、RabbitMQ简介:'''RabbitMQ就是消息队列之前不是学了Queue了吗,都是队列还学RabbitMQ干嘛?干的事情是一样的Python的Queue有两个,一个线程Queue生产者消费者模型,一个进程Queue用于父进程与子进程交互两个完全独
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这