术语表¶
- 扩展类型¶
“扩展类型”可以指用
cdef class
或@cclass
定义的 Cython 类,或者更一般地指任何最终实现为原生 C 结构的 Python 类型(包括内置类型,如 int 或 dict)。- 动态分配或堆分配¶
使用
malloc
(在 C 中)或new
(在 C++ 中)分配的 C 变量是 动态分配/堆分配 的。它的生命周期一直持续到用户显式删除它(在 C 中使用free
或在 C++ 中使用del
)。这可能发生在与分配不同的函数中。- 全局解释器锁或 GIL¶
Python 解释器中的一个锁,用于确保一次只运行一个 Python 线程。此锁纯粹是为了确保竞争条件不会破坏内部 Python 状态。除非持有 GIL,否则无法操作 Python 对象。在编写应并行运行的代码时,它与 Cython 最为相关。如果您不打算编写并行代码,那么在 Cython 中释放 GIL 通常没有好处。您不应该在代码中将 GIL 用作通用锁定机制,因为对 Python 对象的许多操作会导致它被释放,并将控制权传递给另一个线程。另请参见 CPython 项目的术语表条目。
- 指针¶
指针是一个存储另一个变量地址的变量(即内存位置的直接地址)。它们允许动态内存分配和释放。它们可以用来构建动态数据结构。 了解更多。
- Python 对象¶
在使用 Python 时,每个变量的内容都是一个 Python 对象(包括 Cython 扩展类型)。Python 对象的关键特性是它们是通过引用传递的,并且它们的生存期是自动管理的,因此当不再存在对它们的引用时,它们会被销毁。在 Cython 中,它们与 C 类型不同,C 类型是通过值传递的,并且它们的生存期根据它们是在堆栈上还是堆上分配来管理。要在 Cython 中显式声明 Python 对象变量,请使用
cdef object abc
。在 C 中,它们被称为PyObject*
。- 堆栈分配¶
在函数中声明为
cdef SomeType a
的 C 变量被称为在堆栈上分配。它只在函数持续时间内存在。- 类型化内存视图¶
一个有用的 Cython 类型,用于快速访问内存块。内存视图本身实际上不拥有任何内存。但是,它可以使用支持 缓冲区协议 的 Python 对象(通常是“数组”类型,例如 Numpy 数组)进行初始化。内存视图保持对该 Python 对象的引用处于活动状态,并提供对内存的快速访问,而无需通过对象的 Python API 及其
__getitem__()
/__setitem__()
方法。有关更多信息,请参见 类型化内存视图。