Python heapq 稳定优先队列:用序号处理并列,避免比较任务内容 先约定“同样着急”时谁先执行假设一个图片处理脚本收到普通任务甲、紧急任务、普通任务乙和普通任务丙。业务规则是紧急任务先取,三个普通任务按到达次序取。任务本身是字典,包含名称、路径和处理参数;这些字段用于执行任务,不能... yunqueblog/ 技术教程/ 2026-10-01/ 5 阅读
Python contextmanager:资源清理完成了,异常为什么还应该传出去 把资源状态和业务结果分开验收导入报表时,第二行金额格式错误,读取流已经关闭,任务是否可以显示成功?当然不能。资源是否释放与数据是否处理完成,是两项独立结果。把关闭动作封装成上下文管理器后,最容易漏掉的是后半项:为了记... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
TCP 消息分帧实战:用 Python 长度前缀解析器处理拆包与合并读取 客户端发送两条消息,服务端一次 recv 收到一条半,通常是应用对 TCP 的边界作了错误假设。TCP 提供有序字节流,应用必须自己定义消息结束的位置。把一次 send 对应到一次 recv,在本机测试中偶尔成立,也... yunqueblog/ 技术教程/ 2026-10-01/ 5 阅读
Python UTF-8 分块解码:字符跨过读取边界时,怎样保留未完成字节 读取日志流时,英文测试完全正常,换成中文就偶发 UnicodeDecodeError,常见原因是把每次收到的字节块直接解码。读取边界由缓冲区决定,未必落在字符边界上。某一块末尾只含一个字符的前半段,并不能直接说明原数... yunqueblog/ 技术教程/ 2026-10-01/ 5 阅读
Python SHA-256 文件校验:算对摘要之后,还要确认校验值从哪里来 下载文件后算出一串 SHA-256,只完成了测量。真正有用的下一步,是拿它与一个明确来源的预期值比较。若预期值也是从刚下载的文件重新算出来,两边当然一致,却没有回答“这是不是我要的那个发布包”。开始之前,先写清版本、... yunqueblog/ 技术教程/ 2026-10-01/ 5 阅读
SQLite SAVEPOINT:局部失败怎样回滚,RELEASE 什么时候才提交 把一批工作划出可撤回的局部导入一份清单时,前半段已经通过检查,后半段可能包含重复编号。若业务允许跳过这一小段,就需要撤销这段已经成功写入的记录,同时保留前面的工作。只捕获报错不够:报错之前成功执行的语句,仍可能留在当... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python groupby 分组实战:相邻片段和全局汇总是两种问题 先用一条交错记录确定需求假设流水按到达顺序记录为 A 收到两件、A 收到三件、B 收到七件、A 又收到五件。运营想看每段连续处理量,财务想看每位客户的总量。输入完全相同,答案却不同:前者有三段,后者只有两个客户。选工... yunqueblog/ 技术教程/ 2026-10-01/ 6 阅读
HTTP gzip 长度排查:字符数、原始字节和压缩字节别混着比 下载结果有一千多个字节,响应头却写四十五,就一定是服务端报错吗?如果响应使用 gzip,而客户端已经解压,两边计算的可能不是同一层数据。排查要先确定正在观察字符、原始编码字节,还是压缩后的正文。本文在 Python ... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python 临时文件生命周期:关闭、再次打开与自动清理分开安排 临时文件最麻烦的问题往往出现在成功路径之外:处理到一半报错,目录留在磁盘;准备交给另一个程序读取,文件却已经删除。解决办法是把“资源活多久”和“处理做什么”分开设计。本文在 Python 3.12.14 上执行,第二... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读
Python Unicode 规范化:看起来一样的文字,为什么比较不相等 从网页复制的名字与数据库里的名字看起来一致,等号却返回假,未必是编码损坏。有些文字能用一个预组合码点表示,也能用基础字母加组合符号表示。Python 字符串比较检查码点序列,不会替你决定这些形式是否应视作同一个业务名... yunqueblog/ 技术教程/ 2026-10-01/ 4 阅读