python教程技术文章
-
解释 asyncio eager_task_factory 为什么会让协程在 Task 构造时同步起跑,说明缓存命中、首个阻塞 await、异常与全局任务工厂带来的顺序变化。497 收藏 -
QueueListener 停止时不会凭空把队列清空,而是把停止哨兵放到队尾并等待监听线程结束。本文用一个小型文件日志项目演示正确的关闭顺序、验收方式和常见丢日志边界。496 收藏 -
subprocess.run 的 timeout 只解决等待问题。本文用 Popen、独立进程组和 communicate,说明 POSIX 与 Windows 如何在超时后终止子进程树并回收输出。495 收藏 -
dataclasses.field 的 default_factory 接收的是零参数可调用对象,应该写成 list,而不是已经创建好的 []。本文对比三种写法,解释报错位置,并用两个实例的内容和身份检查确认列表隔离。495 收藏 -
CPython 3.15 已把 RISC-V 纳入 Tier 3 支持,但解释器能运行不等于第三方扩展已有可用轮子。本文给出 riscv64 扩展构建前的运行时、ABI、工具链、系统依赖与 wheel 标签检查清单。493 收藏 -
文章 · python教程 | 3星期前 | Python教程 · 进程管理 · Python subprocess.Popen Python实时读取标准输出 Python子进程管道堵塞 Python进程管理
用 subprocess.Popen 实时读取子进程输出时,不能只盯着 stdout;同时消费 stderr、让子进程及时 flush,并在退出后回收线程,才能避免管道堵塞和日志丢失。492 收藏 -
Python sqlite3 的 with 代码块并不等于关闭连接。本文从连接上下文、事务模式和线程边界解释数据未提交的原因,并给出可直接排查的写法。488 收藏 -
Python sqlite3 的 autocommit 要先选清自动提交、显式事务或旧式 isolation_level。本文用连接参数、in_transaction 和重连验证排查提交回滚问题,并给出 Python 3.11 及更早版本的兼容写法。488 收藏 -
Python 3.13 新增 typing.get_protocol_members,可返回 Protocol 定义及继承得到的成员名称 frozenset。本文通过一次成员探测故障复盘,说明正确读取、稳定排序、泛型别名边界、TypeError 处理和旧版本兼容写法。487 收藏 -
Python queue.Queue 的 join() 卡住,通常不是队列里还有元素,而是消费者取走任务后少调用了 task_done()。本文解释未完成计数,给出 finally 配对写法、异常处理和停机复查清单。484 收藏 -
Python sqlite3 默认返回 tuple。本文用 sqlite3.Row 和自定义 dict_factory 演示如何按命名字段读取查询结果,并说明连接级配置、列别名和已有游标的边界。480 收藏 -
Python 日志重复输出通常来自子 logger 与 root logger 同时处理同一条 LogRecord。本文用 logger 拓扑、handler 归属和 LoggerAdapter 上下文三个维度,给出可执行的排查与配置选择方法。471 收藏 -
讲清 Python asyncio.timeout_at 如何用 loop.time() 计算绝对截止时间,正确处理 TimeoutError,并用 expired() 判断超时边界。470 收藏 -
用 Python re 的命名分组和 groupdict 解析可选日志字段,区分整行失败、字段缺失与空字符串,并在字典边界统一设置默认值。470 收藏 -
asyncio.wait_for 超时并不等于任务立即消失:默认会取消被等待对象并等待取消完成。本文用 finally、shield 和 Task 引用说明如何保留清理机会,并区分取消任务与继续运行任务。469 收藏