本文档提供了CPython代码库的高级概述,解释了其架构、主要组件和执行流程。CPython是Python编程语言的参考实现,主要用C语言编写。本概述有助于开发人员理解解释器不同部分如何协同工作来执行Python代码。
CPython 组织成几个主要子系统,它们协同工作以解析、编译和执行 Python 代码。下图说明了其高层架构。
来源:Python/bytecodes.c1-33(行号)、Python/ceval.c1-50 Objects/object.c1-30 Python/pystate.c52-70 Python/compile.c1-15
Python 代码从源代码文本到执行会经历几个阶段。理解这个流程是理解 Python 底层工作原理的基础。
运行 Python 程序时,代码会遵循此路径:
来源:Python/compile.c1-15 Python/flowgraph.c1-50 Python/bytecodes.c145-200 Python/generated_cases.c.h1-30 Python/optimizer.c103-155 Python/executor_cases.c.h1-30
Python 的对象系统是该语言的基础。Python 中的一切都是一个对象,由 CPython 的内存管理系统管理。
CPython 对象系统的主要特性:
来源:Objects/object.c42-100 Include/internal/pycore_object.h20-100 Objects/typeobject.c1-50 Python/gc_free_threading.c1-30
CPython 通过解释字节码指令来执行 Python 代码。指令执行循环是解释器的核心部分。
CPython 使用双模式执行系统:
模式一:直接字节码解释器,处理所有 Python 字节码指令。
模式二:基于追踪的优化器,将字节码转换为微操作(UOps)。
来源:Python/ceval.c500-550 Python/bytecodes.c145-300 Python/generated_cases.c.h20-100 Python/optimizer.c103-155 Python/optimizer_bytecodes.c1-50
全局解释器锁(GIL)是一个互斥锁,用于保护对 Python 对象的访问,防止多个线程同时执行 Python 字节码。
GIL 的关键方面:
来源: Python/ceval.c350-450 Python/pystate.c350-430
CPython 提供了一个 C API,允许开发者使用 C 语言编写的模块来扩展 Python,并将 Python 嵌入到其他应用程序中。
C API 提供了以下功能:
来源: Include/internal/pycore_object.h20-100 Objects/typeobject.c90-150 Objects/object.c42-100
Python 源代码在执行前要经过多个编译阶段。
编译过程包括:
来源: Python/compile.c1-50 Python/symtable.c1-50 Python/flowgraph.c1-50
CPython 维护着各种状态结构来管理执行环境。
关键状态结构包括:
来源: Python/pystate.c50-200 Include/internal/pycore_interp.h1-30 Python/pylifecycle.c1-50
Python 标准库与核心解释器紧密集成,一些模块使用 C 语言实现以提高性能。
标准库集成的关键方面:
sys 等核心模块提供对解释器内部的访问来源: Python/sysmodule.c1-50 Python/import.c1-50
CPython 是一个复杂的系统,多个组件协同工作以提供 Python 编程体验。代码执行管道将 Python 源代码转换为字节码,然后由解释器执行。对象系统和内存管理确保 Python 对象的有效处理。GIL 管理线程同步,而 C API 支持扩展开发。
了解这些核心组件为深入研究 CPython 代码库的特定部分以及为开发做出贡献奠定了坚实的基础。
有关特定组件的更详细信息,请参阅: