python教程技术文章
-
用一个多模块请求场景说明 Python LoggerAdapter 如何把上下文交给 Handler 和 Formatter,重点处理字段缺失、重复 Handler 与 merge_extra 版本差异。215 收藏 -
Python frozen dataclass 保存派生字段时,应把计算放进 __post_init__,用 object.__setattr__ 完成初始化,并用 default_factory 和稳定字段顺序控制默认值与构造签名。213 收藏 -
Python dataclass 可以用 InitVar 接收只在构造阶段使用的配置或环境参数,再通过 __post_init__ 生成真正字段。本文同时说明 default_factory、frozen=True 和字段顺序的边界。264 收藏 -
Python sqlite3 多线程报错通常不是 SQL 写错,而是一个 Connection 被创建它的线程之外复用。本文给出每线程独立连接和共享连接加锁两种改法,并说明提交与回滚边界。264 收藏 -
Python sqlite3 的 with 代码块并不等于关闭连接。本文从连接上下文、事务模式和线程边界解释数据未提交的原因,并给出可直接排查的写法。488 收藏 -
文章 · python教程 | 1星期前 | 并发 · 日志 · Python教程 · Python Fork multiprocessing 多进程日志 spawn QueueHandler QueueListener
Python 多进程直接写终端或同一个文件时,日志容易互相交错。本文用 multiprocessing.Queue、QueueHandler 和 QueueListener 集中日志出口,并解释 spawn、fork、队列关闭与全局顺序的边界。300 收藏 -
Python multiprocessing 使用 spawn 时,子进程会重新导入主模块。本文用入口保护、统一 context、Queue 传递和日志边界解决重复导入与重复输出问题。107 收藏 -
asyncio.wait_for 超时后,底层任务看起来还在运行,通常不是超时失效,而是任务正在响应取消并执行 finally 清理,或者被 asyncio.shield 有意保护。本文用最小实验区分取消、清理、保护和 TaskGroup 的边界。441 收藏 -
TaskGroup 中一个任务失败后,其他任务会被取消并等待收尾;本文用代码说明 CancelledError、ExceptionGroup 与 asyncio.timeout 的边界。475 收藏 -
Path.iterdir() 遇到 PermissionError 时,不要把异常包在整棵扫描树外层;按目录捕获 OSError,记录跳过路径,再用 is_dir() 和 is_file() 区分结果,扫描就能继续且可追踪。468 收藏 -
Python pathlib 拼接用户路径时,绝对路径段会让前面的基目录失效。本文对比 / 与 joinpath(),说明如何先判断相对路径,再用 resolve()、relative_to() 和 is_file() 检查目录边界与文件类型。286 收藏 -
切换 Python 3.14 free-threaded 构建前,按解释器状态、wheel 标签、模块声明、C API 并发风险和 PYTHON_GIL=0 回归测试检查扩展兼容性。270 收藏 -
spawn 会用全新 Python 解释器导入入口模块,因此进程创建必须放进 main 保护。本文用最小示例解释导入边界、可 pickle 要求和稳定检查方法。488 收藏 -
Python typing.Protocol 适合把第三方对象需要满足的最小接口写成结构化类型,不要求对方继承本地基类。本文用存储适配场景说明 Protocol、runtime_checkable 与真正行为测试各自能保证什么。298 收藏 -
Python subprocess 同时捕获 stdout 和 stderr 时,父进程若只读取一侧或先 wait 可能因管道写满而卡住。本文用 communicate 收集双流,并说明 TimeoutExpired 后 kill 与再次 communicate 的安全收尾方式。459 收藏