- 博客(161)
- 资源 (25)
- 收藏
- 关注
原创 RabbitMQ消费将消息放回队列
一,背景问题:正式环境RabbitMQ开了三个线程消费消息,导致数据被重复创建,消费几乎是同一时刻消费的.解决:在Redis中加锁,判断锁是否存在,如果存在将消息重新放回队列之中.二,代码实现import datetimeimport jsonimport collectionsimport pikaclass Mq_custom(object): def __init__(self, queue_name='', exchange='', exchange.
2020-12-23 16:01:51
1803
2
原创 RabbitMQ 死信+延迟队列
前菜死信消息:消息被拒绝(Basic.Reject或Basic.Nack)并且设置 requeue 参数的值为 false 消息过期了 队列达到最大的长度过期消息: 在 rabbitmq 中存在2种方可设置消息的过期时间,第一种通过对队列进行设置,这种设置后,该队列中所有的消息都存在相同的过期时间,第二种通过对消息本身进行设置,那么每条消息的过期时间都不一样。如果同时使用这2种方法,那么以过期时间小的那个数值为准。当消息达到过期时间还没有被消费,那么那个消息就成为...
2020-08-19 20:19:43
428
转载 Leetcode算法题之二叉树模板
一、树的定义Definition for a binary tree node.class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right二、树的遍历1、前序遍历思路:从根节点开始,每次迭代弹出当前栈顶元素,并将其孩子节点压入栈中,先压右孩子再压左孩子.
2020-08-02 15:00:20
611
2
原创 Kafka集群生产者消费者使用实例(一)
名词解析:broker: 一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。topic: 主题 ,代表一类消息partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。每个partition都对应唯一的消费者!!!offset:每个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每个消息都有一个连续的序列号叫做offset
2020-05-28 11:39:37
816
转载 Zookeeper+Kafka集群部署
主机规划:10.200.3.85 Kafka+ZooKeeper10.200.3.86 Kafka+ZooKeeper10.200.3.87 Kafka+ZooKeeper软件下载地址:#wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.6/apache-zooke...
2020-01-04 14:45:43
504
2
原创 Cursor禁用代码自动确认设置
Agent: Auto Apply Edits / Apply Edits Automatically(关闭)一般是指 Cursor 的 Agent 生成的改动会自动应用到文件里(不再弹出逐个确认/Apply)。然后以后 Agent 的改动通常会变成 需要你手动点 Apply/Accept 才会写入文件。搜索关键词:apply、auto apply、agent apply。Auto-apply patches / edits(关闭)解决办法(让改动不再自动确认/自动应用)
2026-04-15 19:50:49
1531
1
原创 K8s Ingress
Kubernetes Ingress 是管理集群外部访问的API对象,提供基于域名和路径的路由、TLS终止及负载均衡功能。相比NodePort和LoadBalancer,Ingress通过统一入口和七层路由优化访问管理。它需要配合Ingress Controller(如Nginx、Traefik)工作,将外部请求按规则转发到对应Service。典型配置包括域名路由、路径分发和HTTPS支持,是云原生应用的关键入口组件。
2026-03-12 15:59:33
249
原创 K8s Service
Kubernetes Service 是一种抽象层,为动态变化的 Pod 提供稳定的网络访问入口。它通过虚拟 IP(ClusterIP)和 DNS 名称实现服务发现,并内置负载均衡功能,将请求分发到后端多个 Pod。Service 有四种类型:ClusterIP(集群内部访问)、NodePort(节点端口暴露)、LoadBalancer(云厂商负载均衡)和 ExternalName(外部 DNS 映射)。Service 通过标签选择器关联 Pod,由 kube-proxy 维护网络规则。此外,Headles
2026-03-12 15:51:09
254
原创 K8s hostpath和pv、pvc的区别
Kubernetes 中 hostPath 仅适用于本地测试,存在节点绑定、数据丢失等局限。PV/PVC 通过分离存储供应与使用,实现了跨节点持久化、动态供应和资源管理,支持生产级存储需求。PV 代表实际存储资源,PVC 声明存储需求,二者结合解耦应用与基础设施,支持动态创建、生命周期管理和配额控制,是承载有状态工作负载的关键抽象。相比 hostPath,PV/PVC 更适合需要数据持久性和灵活管理的生产环境。
2026-03-12 11:01:54
420
原创 k8s 静态 Pod
K8s静态Pod摘要 静态Pod由kubelet直接管理,不依赖Kubernetes API Server,主要用于:1)启动控制平面组件(如API Server),实现集群自举;2)运行关键守护进程,确保集群故障时仍可用;3)快速测试和节点级服务部署。其通过节点磁盘的YAML文件管理,与普通Pod相比具有独立性强、部署简单的特点,常见于/etc/kubernetes/manifests目录。静态Pod适合核心组件和节点级服务,普通Pod则用于常规业务应用。
2026-02-28 17:37:16
670
原创 服务发现原理
传统架构和Kubernetes在服务发现方面存在显著差异。传统方案包括静态配置、DNS负载均衡、反向代理和注册中心(如Zookeeper),需要人工干预且扩展性差。而Kubernetes通过Service资源提供稳定入口,自动管理Endpoint,结合DNS和kube-proxy实现动态发现与负载均衡,还支持Headless Service直接访问Pod。相比传统架构,Kubernetes原生集成服务发现功能,无需额外组件,具有自动化程度高、运维简单等优势,特别适合云原生环境下的动态微服务场景。
2026-02-27 18:01:08
411
原创 Python GIL(全局解释器锁)详解
Python的GIL(全局解释器锁)是CPython的核心机制,确保线程安全但限制多线程并行。GIL在I/O密集型任务中影响较小,因线程阻塞时会释放锁;但在CPU密集型任务中会严重降低多线程性能。解决方案包括使用多进程、JIT解释器、C扩展释放GIL或异步编程。未来可能通过子解释器等方式改进。最佳实践是根据任务类型选择方案:I/O密集型用多线程/异步,CPU密集型用多进程/JIT。GIL是设计权衡而非缺陷,理解其原理可有效规避限制。
2025-08-15 17:46:19
968
原创 Python 垃圾回收机制详解
Python采用三合一的垃圾回收机制:1)引用计数为核心,实时回收无引用对象;2)标记清除解决循环引用问题,通过遍历标记可达对象;3)分代回收基于对象存活时间分代管理,提高回收效率。引用计数高效但无法处理循环引用,标记清除虽全面但开销大,分代回收则通过分代策略优化性能。开发者可通过调整阈值、使用弱引用等方式优化内存管理,并借助gc模块监控和调试内存问题。三种机制协同工作,保障Python内存管理的实时性和高效性。
2025-08-15 16:25:01
1167
原创 Python 协程(Coroutine):轻量级的并发执行单元
协程是Python中的轻量级并发执行单元,比线程更高效,适合I/O密集型任务。核心特性包括协作式调度、状态保持和高效并发。协程由生成器进化而来,Python 3.5+通过async/await原生支持。使用场景包括网络请求、高并发服务器等。协程通过事件循环实现异步操作,相比线程具有更低切换开销,但调试难度较高。最佳实践包括避免阻塞调用、使用异步库和控制并发量。协程实现了用同步写法处理异步操作,是Python高性能应用的重要基础。
2025-08-15 15:34:43
634
原创 Python 可迭代对象、迭代器、生成器
Python中的可迭代对象、迭代器和生成器是密切相关的概念。可迭代对象(如列表、字符串)实现了__iter__()方法,可被多次遍历;迭代器则通过__next__()方法记录遍历状态,只能遍历一次;生成器是特殊的迭代器,使用yield关键字实现延迟计算和状态保存。三者关系为:可迭代对象→迭代器→生成器。生成器最适合处理大数据流,能显著节省内存。关键区别在于:可迭代对象无状态可重复遍历,迭代器和生成器有状态且一次性使用,生成器通过yield实现更简洁的迭代器创建方式。
2025-08-15 15:08:32
750
原创 Python 哈希冲突下查找元素。
哈希冲突发生时,查询元素entry1的过程取决于冲突解决方法。链地址法通过遍历桶3的链表查找entry1,时间复杂度可能从O(1)退化到O(n)。开放地址法则按探测序列(如线性探测)在后续桶中搜索,Python的dict采用类似方法自动处理冲突。实际使用中,直接通过my_dict[entry1]即可获取值,无需关心底层实现。两种方法都能有效解决冲突,但开放地址法(Python默认)通常更高效,尤其在自动扩容机制支持下。
2025-08-14 15:26:52
1090
原创 Windows VMnet1和VMnet8的区别
VMnet8是用于 NAT 模式的虚拟网络适配器,它允许虚拟机访问外部网络,但外部网络不能直接访问虚拟机(除非配置了端口转发)。VMnet1是用于 Host-Only 模式的虚拟网络适配器,它创建了一个封闭的网络环境,仅限于主机和特定的虚拟机之间的通信,虚拟机无法直接访问外部网络。
2025-01-17 15:00:34
880
转载 Flask mock之request参数
在flask写单测,使用 app.app_context() 方法时提示:RuntimeError: Working outside of request context.
2024-07-14 09:18:26
203
1
原创 Python实现单分派泛型函数
我们为该函数提供了两个实现:一个默认实现和两个特定于整数和字符串类型的实现。当我们调用add函数时,它将根据参数的类型选择适当的实现。如果参数是整数或浮点数,则将调用默认实现;如果参数是字符串,则将调用特定于字符串类型的实现。在这个例子中,我们定义了一个名为add的函数,并使用@singledispatch装饰器将其转换为单分派泛型函数。
2023-07-06 15:26:30
290
转载 Python h5py包详解
h5py文件是存放两类对象的容器,数据集(dataset)和组(group),dataset类似数组类的数据集合,和numpy的数组差不多。group是像文件夹一样的容器,它好比python中的字典,有键(key)和值(value)。group中可以存放dataset或者其他的group。”键”就是组成员的名称,“值”就是组成员对象本身(组或者数据集)。总结:一个h5py文件是 “dataset” 和 “group” 二合一的容器。
2023-06-28 22:22:39
1789
原创 统计http请求最近5s内的请求成功率。
正常来说我们使用方案一即可满足我们的需求,同时内存消耗也比较小,但是有一点需要注意的是,方案一如果请求量特别小,随机值特别大的话可能导致请求的结果不准确。
2023-06-13 16:49:37
1048
原创 Python责任链模式
例如,我们创建了三个不同的子类,分别是处理数字的处理程序、处理字符串的处理程序和处理其他类型的处理程序。当请求到达责任链时,数字处理程序首先会处理请求,如果不能处理,则将请求转移到字符串处理程序,依此类推。这是一个基本的处理程序类,它包括一个指向继任者的成员变量,并有一个处理请求的handle方法和一个子类可以实现的私有处理方法_handle。这是一个示例模拟责任链模式的基本实现,实际上,我们可以结合上下文和业务需求制定更复杂的责任链,以实现更灵活的请求处理。
2023-06-13 15:17:54
993
原创 Python适配器模式
SQLAlchemy ORM:SQLAlchemy 是一个流行的 Python ORM 库,它使用适配器模式来支持多种不同的 SQL 数据库(例如 PostgreSQL、MySQL 或 SQLite)。requests模块:requests 是一个用于发送 HTTP 请求的 Python 库,它使用适配器模式来兼容不同的底层传输库(例如 urllib3 或 PySocks)。通过使用适配器模式,我们可以使两个不兼容的类之间进行通信,并将它们融合在一起。现在需要编写一个使用千米而不是英里测量距离的应用程序。
2023-06-12 16:32:01
1127
原创 Python 策略模式
Shipping 类的构造函数接收一个计算运费的函数(即策略)。Django框架:Django 是一个 Python 的 Web 应用程序框架,它使用策略模式来提供不同的存储后端(例如 SQL 数据库,非关系型数据库等)。Scikit-learn模块:Scikit-learn 是一个流行的机器学习库,它使用策略模式来实现不同的机器学习算法(如分类,聚类,降维等)。Pygame模块:Pygame 是一个用于创建游戏的 Python 库,它使用策略模式来处理游戏中的不同角色或敌人的行为。
2023-06-12 15:49:11
2203
原创 Python原型模式(克隆模式)
我们使用字典(self.objects)来存储已注册的对象,每个对象都有一个名称。然后,它将关键字参数用于更新新对象的属性,并将其返回。在这个例子中,我们创建了一个名为Person的类,它表示一个人员。我们创建了一个原型对象Prototype,它注册了一个名为“person”的Person对象。然后我们使用clone方法来创建两个新的Person对象,它们都是根据原型Person对象创建的。在这个例子中,我们创建了一个原型类Prototype,它包含了注册对象、注销对象和克隆对象的方法。
2023-06-12 15:22:25
1162
原创 Python外观模式
使用外观模式,我们可以隐藏_Socket类的底层复杂性,并将其转化为一个简单易用的接口。在这个例子中,我们创建了一个名为Network的类,该类包含一个名为_Socket的内部类,该类实现了当前网络库的一些底层功能。然后,我们定义了几个方法,这些方法简单地调用_Socket类中的方法。使用该网络库时,我们可以使用外观Network类的接口,而不需要了解_Socket类的底层实现。下面是一个使用外观模式的例子,其中包含一个网络库,该库的实现非常复杂,但是我们可以使用外观模式来简化它。
2023-06-12 15:13:27
1037
原创 Python模板模式
在这个例子中,我们定义了一个抽象类Game,并定义了三个抽象方法initialize、start_game和end_game。在这个例子中,我们创建了一个Chess对象和一个Checkers对象,并分别调用它们的play方法。通过这种方式,我们可以确保这些类的方法按照正确的顺序被调用,这遵循了模板方法模式的基本原则。注意,这里Game类也包含了一个名为play的方法,该方法包含一个模板方法,其中定义了initialize、start_game和end_game方法的执行顺序。
2023-06-12 14:52:06
1096
原创 Python建造者模式
建造者模式是一种设计模式。它将复杂对象的构建过程和表示相分离,并通过一步步创建对象来构建复杂对象。建造者模式可以帮助我们在创建对象时保持灵活性和可扩展性。
2023-06-12 14:49:49
860
原创 Python工厂方法和抽象工厂详解
工厂方法模式和抽象工厂模式在 Python 中也有类似的区别。Python中的工厂方法模式与其他语言中的实现方式类似,使用一个定义抽象方法的类来创建对象。我们通过编写一个特殊的方法来创建对象,这个方法是抽象的,由具体的子类来实现。抽象工厂模式则通过创建一组相关或相互依赖的对象来工作,而不是单一对象。在 Python中,使用抽象类和接口来创建对象系列,这些系列可以是继承自抽象类的类,或实现由接口定义的方法的类。这样可以更加灵活地创建,扩展和维护对象,并易于避免代码重复。
2023-06-12 14:15:17
600
原创 MQTT消息实例
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。这就是为什么在介绍里说它非常适合“在物联网领域,传感器与服务器的通信,信息的收集”,要知道嵌入式设备的运算能力和带宽都相对薄弱,使用这种协议来传递消息再适合不过了。(5)小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
2023-05-29 17:45:01
1684
Kafka多分区消费实践.rar
2020-06-11
Python必学资料全家桶
2019-06-28
Django restframework课件笔记详解
2019-03-21
利用django自带的routers实现对url路由的分发
2019-07-13
Django中自带的Signal的使用
2019-07-29
Elasticsearch、Logstash、Kibana核心套件安装包
2020-08-10
redis_cluster实战栗子.rar
2020-05-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅