# 9.1 构建线程状态

需要先将帧（frame）绑定到一个线程上，它才能够被执行。CPython 可以在单个解释器中同时运行多个线程，而\*\*解释器状态（interpreter state）\*\*保存了由这些线程状态组成的链表。

CPython 至少包含一个线程，每个线程都有它自己的状态。

{% hint style="info" %}
**参见**

关于线程更加细节的知识将在“并行和并发”这一章详细阐述。
{% endhint %}

## 线程状态类型

线程状态类型（`PyThreadState`）包含了 30 多个属性，主要包括：

* 线程的唯一标识符；
* 指向其他线程状态的链表；
* 该线程状态由哪一个解释器状态生成；
* 当前正在执行的帧；
* 当前递归的深度；
* 可选的追踪函数；
* 当前正在处理的异常；
* 当前正在处理的任意异步异常；
* 产生多个异常时抛出的异常栈（例如在 `except` 代码块中触发的异常）;
* GIL 计数器；
* 异步生成器计数器。

## 相关的源文件

与线程状态相关的源文件分布在多个文件中：

| 文件                        | 用途                |
| ------------------------- | ----------------- |
| Python/thread.c           | 线程的 API 的实现       |
| Include/threadstate.h     | 一些线程状态的 API 及类型定义 |
| Include/pystate.h         | 解释器状态的 API 及类型定义  |
| Include/pythread.h        | 线程的 API 定义        |
| Include/cpython/pystate.h | 一些线程和解释器状态的 API   |
