Python 共 95 篇文章

Python annotationlib延迟求值注解的运行时获取
2026-05-03 01:21:44
Python annotationlib延迟求值注解的运行时获取 在 Python 开发中,类型注解的默认行为在 Python 3.7 及以后版本发生了变化,尤其是通过 from future import annotations 导入后,所有的注解在运行时默认被保存为字符串而非实际的对象。这种“延
Python 类型注解 延迟求值
3 0
Python GIL锁对多线程CPU密集型任务的性能瓶颈分析
2026-05-02 15:14:20
Python GIL锁对多线程CPU密集型任务的性能瓶颈分析 Python 的多线程在处理计算密集型任务时往往无法达到预期的加速效果,甚至可能比单线程更慢。这主要源于 Python 解释器中的全局解释器锁。本文将带你直观地复现这一性能瓶颈,分析其底层原理,并提供切实可行的解决方案。 1. 理解 GI
Python GIL 多线程
5 0
Python os.path与pathlib的区别:为什么推荐用pathlib
2026-05-02 14:13:39
Python 处理文件路径的历史遗留问题一直存在。早期的 os.path 模块本质上是在处理字符串,而 Python 3.4 引入的 pathlib 则将路径视为对象。理解两者的区别并完成迁移,能够显著减少代码中的错误并提升可读性。 以下将直接从操作层面对比两者,并展示如何在实际开发中用 pathl
Python pathlib os.path
5 0
Python内存池机制对小对象分配的性能影响
2026-05-01 11:28:14
Python内存池机制对小对象分配的性能影响 Python 在处理大量小对象时,如果每次都直接向操作系统申请和释放内存,会产生严重的性能开销和内存碎片。为了解决这个问题,Python 内部实现了一套高效的内存池机制(Pymalloc),专门用于管理小对象的内存分配。这套机制通过预分配大块内存并进行内
Python 内存管理 Pymalloc
12 0
Python asyncio事件循环在百万级WebSocket连接中的调度优化
2026-05-01 08:19:32
Python asyncio事件循环在百万级WebSocket连接中的调度优化 在Python中处理百万级WebSocket连接时,标准的asyncio实现往往会因为调度开销、内存管理和文件描述符限制而崩溃。要达到这一量级,必须从底层的事件循环替换开始,逐步优化对象创建策略与操作系统参数。 第一阶段
Python asyncio uvloop
13 0
Python PEP 695类型参数语法简化泛型定义
2026-04-30 17:15:27
Python PEP 695类型参数语法简化泛型定义 Python 3.12引入了PEP 695,这是一项重要的语言改进,简化了泛型类型的定义方式。新语法消除了之前复杂的类型参数声明方式,使代码更加清晰和易于理解。 学习本指南后,你将掌握如何使用Python 3.12的类型参数语法,提升代码可读性和
Python PEP695 类型参数
15 0
Python __enter__与__exit__实现上下文管理器的异常传播
2026-04-30 10:20:17
Python enter与exit实现上下文管理器的异常传播 Python 的 with 语句不仅用于简化资源管理(如文件打开、锁获取),更是处理异常的强力工具。决定代码块内抛出的异常是继续向外崩溃,还是在内部被“消化”掉,完全取决于上下文管理器中 exit 方法的实现细节。 以下步骤将详细拆解如何
Python 上下文管理器 异常处理
13 0
Python concurrent.futures.ProcessPoolExecutor的进程复用机制
2026-04-30 04:28:05
Python concurrent.futures.ProcessPoolExecutor的进程复用机制 利用多进程进行并行计算时,频繁地创建和销毁进程会消耗大量系统资源,导致程序性能下降。concurrent.futures.ProcessPoolExecutor 通过维护一个固定数量的进程池,实
Python 多进程 进程池
16 0
Python contextlib.suppress忽略特定异常的简洁写法
2026-04-29 22:29:22
Python contextlib.suppress忽略特定异常的简洁写法 在编写 Python 代码时,经常会遇到“预计可能发生错误,但发生时并不需要处理,只需默默跳过”的场景。例如,尝试删除一个可能不存在的文件,或者从字典中获取一个可能缺失的键。如果不加处理,程序会因报错而中断;如果加上繁琐的
Python 异常处理 上下文管理器
13 0
Python __dict__与__slots__在属性存储上的内存差异
2026-04-29 20:24:36
Python dict与slots在属性存储上的内存差异 Python 作为一门动态语言,其灵活性允许我们在运行时随意给对象添加属性。这种便利性背后,是 Python 默认为每个对象维护的一个字典 dict。然而,当需要创建成千上万个对象时,这种默认机制会消耗大量内存。slots 是 Python
Python __dict__ __slots__
13 0
Python __init__和__new__的区别:什么时候需要重写__new__
2026-04-29 19:23:41
Python 中 init 和 new 的区别常常让初学者感到困惑。简单来说,new 负责对象的创建(构造),而 init 负责对象的初始化。理解这两者的分工是掌握 Python 类机制的关键。 1. 理解对象创建的生命周期 在 Python 中,当你调用一个类(例如 MyClass)来实例化对象时
Python 面向对象 __init__
11 0
Python weakref.WeakKeyDictionary在缓存键对象回收时的行为
2026-04-29 16:22:32
Python weakref.WeakKeyDictionary在缓存键对象回收时的行为 1. WeakKeyDictionary基本概念 创建 weakref.WeakKeyDictionary 是Python标准库中提供的一种特殊字典,它使用弱引用来存储键。与普通字典不同,当键对象没有被其他引用
Python 弱引用 缓存
13 0
Python ExceptionGroup与except*处理多个并发异常
2026-04-29 14:24:29
Python ExceptionGroup与except处理多个并发异常 在编写涉及并发任务(如 asyncio)或批量处理的程序时,一个经典的痛点是:当多个任务同时失败时,程序只能捕获到第一个遇到的异常,后续的错误往往会被掩盖或丢失,导致调试困难。Python 3.11 引入了 Exception
Python 异常处理 ExceptionGroup
9 0
Python inspect模块动态获取函数签名与参数默认值
2026-04-29 07:13:46
Python inspect模块动态获取函数签名与参数默认值 Python 内置的 inspect 模块能够让我们在程序运行时“偷看”函数的内部结构,无需手动查阅源代码。这在编写装饰器、API 文档生成工具或动态调用函数时非常有用。 1. 准备一个演示用的目标函数 首先,我们需要一个包含多种参数类型
Python inspect模块 函数签名
10 0
Python列表和元组的内存占用差异:为什么元组更省内存
2026-04-29 02:27:51
Python列表和元组的内存占用差异:为什么元组更省内存 Python 中的列表和元组在功能上非常相似,都用于存储数据的有序集合。然而,在底层内存管理上,两者存在本质区别。元组通常比列表占用更少的内存空间,这在处理大量数据或对性能要求极高的场景下尤为关键。 以下步骤将深入剖析这一差异的原理,并提供具
Python 列表 元组
22 0
Python asyncio.Event在协程间事件通知的用法
2026-04-29 01:15:27
asyncio.Event 是 Python asyncio 库中用于协程间简单通信的同步原语。它的作用类似于一个线程安全的标志位,允许一个或多个协程等待某个事件发生,直到另一个协程将该事件标志位设为“真”。这就好比比赛中的发令枪,裁判(主控协程)鸣枪(设置事件),所有运动员(等待协程)听到枪响后同
Python asyncio 协程
27 0
Python __slots__为什么能减少内存占用并加速属性访问
2026-04-28 01:25:43
Python 默认的对象创建方式虽然灵活,但在处理数百万甚至上亿个小对象时,会消耗巨大的内存资源并拖慢运行速度。这是由于 Python 默认为每个对象分配了一个字典来存储属性。通过使用 slots,我们可以显著优化这两个方面。 1. 理解默认内存开销 在 Python 中,当你定义一个类并实例化时,
Python 内存优化 性能优化
25 0
Python logging模块的Logger层级传播与Handler配置
2026-04-27 23:27:22
Python logging模块的Logger层级传播与Handler配置 Python标准库中的 logging 模块是一个功能强大的日志系统,但很多开发者在使用时常遇到日志重复打印、配置混乱等问题。掌握Logger的层级结构与传播机制,以及Handler的正确配置方式,是构建清晰日志系统的关键。
Python logging模块 日志系统
24 0
Python __repr__与__str__方法在调试信息中的区别
2026-04-27 13:28:09
Python repr与str方法在调试信息中的区别 在 Python 调试过程中,直接打印自定义对象往往只能看到内存地址(如 <main.Point object at 0x7f...),这对排查问题毫无帮助。为了获得可读的信息,必须重写 str 和 repr 方法。这两者虽然都是将对象转换为字符
Python __str__ __repr__
24 0
Redis List实现简单消息队列的BRPOP阻塞读取
2026-04-27 11:17:22
Redis List 是构建轻量级消息队列的极佳数据结构,其中的 BRPOP 命令提供了“阻塞式读取”的能力。相比于轮询,这种方式能极大降低 CPU 消耗。以下将直接演示如何利用这一特性实现生产者消费者模型。 第一阶段:命令行实操体验阻塞效果 在编写代码之前,先通过命令行直观理解 BRPOP 的工作
Redis 消息队列 BRPOP
23 0