Python 3.15 即将发布:懒加载、性能分析器等大特性及多项实用更新来袭!
Python 3.15 新版本预告又到了一年中 Python 新版本即将发布的时候。随着 Python 3.15.0b1 冻结了新特性已可知今年晚些时候 Python 的新变化。即将推出的大特性众多包括懒加载和 tachyon 性能分析器作者之前还写过关于它的文章《使用 tachyon 对自由线程性能进行基准测试》。去年作者享受研究 Python 3.14 的一些小特性发现很多特性和重要的 PEP 一样有趣值得更多关注今年情况也不例外。Asyncio 任务组取消功能本次版本中 Asyncio 变化不多主要新特性是能够优雅地取消 TaskGroup。TaskGroup 是结构化并发的一种形式让开发者可简洁地创建多个并发任务。假设想在后台等待某种信号来中断任务组执行在 asyncio 里看似简单实际操作较麻烦。不过自定义的 Interrupt 异常作为 ExceptionGroup 的一部分被抛出然后被 contextlib.suppress 过滤可实现优雅退出。新的 TaskGroup.cancel 让这个过程变得简单多了它只是取消任务组不会抛出任何异常。上下文管理器改进装饰器难写成了面试常见问题。而上下文管理器也可兼作装饰器。从 Python 3.3 开始常用的用于打印代码块执行时间的上下文管理器可直接当作装饰器使用。但在某些情况下如迭代器、异步函数和异步迭代器它根本不起作用因为它们的语义与标准函数不同。不过在 Python 3.15 中ContextDecorator 会检查所包装函数的类型确保装饰器覆盖整个生命周期。作者认为这使上下文管理器成为创建装饰器的最佳方式避免了常见陷阱语法更简洁建议更多人这样使用。线程安全的迭代器迭代器是现代 Python 的基础之一可将数据源和数据消费者分离实现更清晰的抽象。但在使用线程或自由线程时这种抽象会失效因为默认情况下迭代器不是线程安全的。Python 3.15 中通过 threading.serialize_iterator 解决了这个问题只需用它包装原始迭代器即可。还有 threading.synchronized_iterator 装饰器会将 threading.serialize_iterator 应用到生成器函数的结果上。另外threading.concurrent_tee 可将值复制到多个迭代器中。在这些工具出现之前主要依靠 Queue 来同步线程间的消费有了这些工具就不用为多线程代码改变抽象方式了。额外特性Counter 异或操作collections.Counter 是非常有用的类能轻松统计离散事件的发生频率有很多实用操作如相加、相减、交集、并集等。在 Python 3.15 中还可添加异或操作。作者把这个特性放在额外部分因为从未对 Counter 使用过集合操作也难想出异或操作的具体使用场景但感激开发者为完整性而添加了这个操作。不可变的 JSON 对象随着 Python 3.15 中 frozendict 的加入现在可以用不可变可哈希的形式表示所有 JSON 类型。json.load 和 json.loads 做了改动增加了 array_hook 参数它与 object_hook 参数配合使用可直接将 JSON 对象解析成这种形式。社交链接提供了 Atom 订阅、GitHub、领英、Bluesky 的链接。本博客由 Pelican 强力驱动它充分利用了 Python 的优势。主题来自 Smashing Magazine。