Python3.13于近期发布,其中包含大量重要更新。Python作为机器学习、数据科学和人工智能领域使用最广泛的编程语言,一直在不断发展,以满足这些领域日益增长的需求。最新发布的Python3.13提供了多项具有影响力的改进,旨在提高性能和生产力,对于从事ML和AI项目的开发人员来说是一个重要的里程碑。Python在ML和AI领域的主导地位主要归功于它的简单性、广泛的库支持和庞大的社区。然而,随着人工智能领域的扩展,对性能更强、效率更高的Python代码的需求变得至关重要。Python3.13引入了自由线程和JIT(JIT)编译等实验性功能,这些功能可以显著提高计算密集型工作负载的性能,而计算密集型工作负载在ML训练和推理任务中很常见。
1.实验性自由线程CPython(PEP703)
全局解释器锁(GIL)是Python中一个长期存在的限制,尤其是对于需要多线程的任务。GIL会阻止多个本地线程同时执行Python字节码,这可能会导致与CPU绑定的操作(如ML模型训练)出现瓶颈。即使Python支持多线程,GIL也会确保解释器在任何时候都只能运行一个线程,因此很难充分利用多核处理器。
对于涉及大型数据集和重型CPU计算的机器学习工作负载,GIL会严重限制其性能。开发人员通常不得不依靠多处理等变通方法,这增加了复杂性和开销。
自由线程执行简介
Python3.13引入了对自由线程执行的实验性支持,允许Python在没有GIL的情况下运行。这是对语言执行模型的巨大改变。取消GIL意味着Python现在可以支持真正的多线程,使多个线程可以在不同的内核上同时运行。
这为更快地执行多线程应用程序打开了大门,而无需切换到外部库或多处理框架。
机器学习工作负载的优势并行数据处理性能提升如何启用自由线程
在Python3.13中启用自由线程需要使用特殊版本的解释器:
注意事项和限制
虽然自由线程的概念很有前途,但它仍处于实验阶段。在生产环境中使用它之前,有几件事需要注意:
2.引入JIT编译器(PEP744)
JIT编译器是一种在程序运行过程中将部分代码编译成机器语言,而不是提前编译,从而提高程序性能的系统。这使得代码运行速度更快,因为可以根据程序的实时使用情况进行某些优化。
与传统口译的区别
Python3.13在PEP744中引入了一个实验性的JIT编译器,旨在加快Python程序的执行速度。虽然该功能仍处于早期阶段,但它标志着Python在提高繁重计算任务(包括ML和AI中常见的任务)的性能方面迈出了重要一步。
内部架构和优化阶段
3.13中的PythonJIT编译器通过将Python代码中频繁执行的部分转换为优化的机器码来工作。下面是它的工作原理:
这种方法允许Python选择性地只编译代码中最常用的部分,无需人工干预即可提高性能。
对ML和AI开发的影响性能提升
对于机器学习和人工智能工作负载(常见的是大型数据集和复杂计算),Python的JIT编译器可以提供显著的优势:
训练循环和实时推理的优势未来的优化
尽管Python3.13中的JIT编译器最初带来的收益不大,但开发人员可以期待未来版本中的持续改进。随着JIT变得越来越强大和智能,它将能够处理更复杂的优化,从而带来更大的性能提升。
如何使用JIT编译器
要在Python3.13中启用JIT编译器,需要使用实验性JIT选项构建Python:
实验状态说明
在Python3.13中,JIT编译器仍处于试验阶段。默认情况下它是禁用的,开发者应谨慎使用它,尤其是在生产环境中。随着JIT的发展,它可能会在未来的Python版本中成为更稳定、更高效的工具。
3.增强的类型功能
Python3.13还对其类型系统进行了多项改进,使开发人员更容易编写清晰、可维护和类型安全的代码。这些更新在大规模机器学习项目中尤其有用,因为数据类型的清晰有助于避免运行时错误。
3.1带有默认值的类型参数(PEP696)TypeVar、ParamSpec和TypeVarTuple默认值介绍
Python的TypeVar、ParamSpec和TypeVarTuple泛型现在支持默认值。这意味着,当您定义泛型类或函数时,现在可以指定默认类型参数,如果没有提供特定类型,将使用默认类型参数。
对多语言代码库的好处3.2过时装饰器(PEP702)warnings.deprecated()装饰器的解释
Python3.13引入了warnings.deprecated()装饰器,它允许开发者将函数标记为已废弃。该警告会在运行时和类型系统中发出,让开发者清楚地知道某个函数已不再推荐使用。
优势3.3只读TypedDict项目(PEP705)typing.ReadOnly简介
Python现在允许您将TypedDict中的某些项指定为只读。这是使用新的typing.ReadOnly特性实现的,它可以防止特定字段在设置后被修改。
优势3.4使用typing.TypeIs进行类型缩小(PEP742)类型缩小的typing.TypeIs解释
与现有的typing.TypeGuard相比,新的typing.TypeIs功能提供了更直观的类型缩小行为。它允许类型检查程序根据条件完善变量类型,从而实现更精确的类型推断。
优势4.利用“asyncio”提高并发性
在人工智能和ML中,高效管理异步任务至关重要,尤其是在需要实时数据处理、模型推理或与多个API交互的环境中。Python3.13为asyncio模块带来了几项重要更新,提高了它在这些要求苛刻的场景中处理并发和任务管理的能力。
Python3.13的主要改进之一是增强了asyncio.TaskGroup功能。任务组允许将多个异步任务放在一起管理,从而更容易处理它们的生命周期,尤其是在处理取消或错误时。
优势服务器管理的新方法
Python3.13为asyncio框架引入了两个用于管理服务器连接的新方法:Server.close_clients()和Server.abort_clients()。这些新方法为开发人员提供了对异步服务器进程的更大控制,这在处理多个客户端(如人工智能驱动的API或网络服务)时至关重要。
优势5.标准库的增强
5.1.base64模块增强
其中一个更显著的更新是增加了base64.z85encode()和base64.z85decode()函数。Z85编码格式比传统的base64更为紧凑,因此成为编码二进制数据的一个有吸引力的选择。
优势5.2.copy模块更新
Python3.13引入了新的copy.replace()函数,简化了克隆修改对象的过程。这对于经常处理复杂数据结构(如神经网络配置或超参数)的机器学习和人工智能从业人员来说尤为重要。
优势5.3.新的dbm.sqlite3模块
Python3.13的另一个重要新增功能是新的dbm.sqlite3模块,它提供了一个基于文件的轻量级数据库解决方案,使用SQLite作为后端。SQLite广泛应用于许多ML应用程序,用于存储元数据、结果或其他键值数据。
优势6.安全性和可靠性改进
Python3.13带来了安全性和可靠性方面的重要更新,这对于经常涉及敏感数据和计算的人工智能应用尤为重要。这些增强功能确保机器学习和人工智能应用能够更安全、更可靠地运行,尤其是在分布式环境中。
SSL增强
Python3.13的主要改进之一是更新了ssl.create_default_context()方法。现在,它设置了更严格的默认标志,为网络通信提供了更高的安全性。
优势引入PythonFinalizationError异常
Python3.13还引入了“PythonFinalizationError”异常,当在解释器的终结阶段尝试某些操作时,该异常就会引发。这是一项重要的新增功能,可确保在关闭过程中正确清理资源。
优势7.平台支持更新
Python3.13大幅扩展了平台支持,使在不同环境(包括移动设备和网络浏览器)中部署ML和AI模型变得更加容易。这些更新为希望构建可在更多设备上运行的人工智能应用程序的开发人员带来了新的可能性。
正式支持iOS(PEP730)和Android(PEP738)
Python首次在第3级正式支持iOS和Android平台。对于希望将人工智能模型和服务引入移动设备的开发人员来说,这是一次重大更新。
优势支持WebAssembly
Python3.13支持wasm32-wasi作为二级平台,从而将WebAssembly(Wasm)支持提升到一个新的水平。
Python3.13延长了发布支持周期,使开发人员更容易规划长期项目并保持兼容性。
全面支持周期延长
优势对长期项目的影响
延长支持期可提供更可预测的维护计划,让人工智能团队更有战略性地规划升级。
优势
如果您正在从事机器学习和人工智能方面的工作,现在正是探索Python3.13新特性的最佳时机。在您的开发环境中测试试验性自由线程和JIT编译器,看看它们如何改善您的工作负载。深入了解增强的类型系统和平台支持,以简化您的开发和部署工作流程。尽管Python3.13带来了强大的新特性,如自由线程解释器和JIT编译器,但它们仍处于试验阶段。在生产环境中部署这些功能之前,必须在开发环境中进行全面测试,以确保其稳定性以及与现有代码库的兼容性。