1 / 18
文档名称:

从底层理解Python的执行-光环大数据-Python培训机构.pdf

格式:pdf   大小:340KB   页数:18页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

从底层理解Python的执行-光环大数据-Python培训机构.pdf

上传人:陈潇睡不醒 2021/3/27 文件大小:340 KB

下载得到文件列表

从底层理解Python的执行-光环大数据-Python培训机构.pdf

相关文档

文档介绍

文档介绍:光环大数据--大数据培训&人工智能培训
-
从底层理解 Python 的执行_光环大数据 Python 培训机构
最近我在学****Python 的运行模型。我对 Python 的一些内部机制很是好奇,比
如 Python 是怎么实现类似 YIELDVALUE、YIELDFROM
这样的操作码的;对于 递推式构造列表(List Comprehensions)、生成器表达式
(generator expressions)以及其他一些有趣的
Python 特性是怎么编译的;从字节码的层面来看,当异常抛出的时候都发生了
什么事情。翻阅 CPython 的代码对于解答这些问题当然是很有帮助的,但我仍
然觉得以这样的方式来做的话对于理解字节码的执行和堆栈的变化还是缺少点
什么。GDB
是个好选择,但是我懒,而且只想使用一些比较高阶的接口写点 Python 代码来
完成这件事。

所以呢,我的目标就是创建一个字节码级别的追踪 API,类似 所
提供的那样,但相对而言会有更好的粒度。这充分锻炼了我编写
Python 实现的 C 代码的编码能力。我们所需要的有如下几项,在这篇文章中所
用的 Python 版本为 。

一个新的 Cpython 解释器操作码
一种将操作码注入到 Python 字节码的方法
一些用于处理操作码的 Python 代码

一个新的 Cpython 操作码
新操作码:DEBUG_OP

光环大数据
光环大数据--大数据培训&人工智能培训
-
这个新的操作码 DEBUG_OP 是我第一次尝试写 CPython 实现的 C 代码,我将尽
可能的让它保持简单。 我们想要达成的目的是,当我们的操作码被执行的时候
我能有一种方式来调用一些
Python 代码。同时,我们也想能够追踪一些与执行上下文有关的数据。我们的
操作码会把这些信息当作参数传递给我们的回调函数。通过操作码能辨识出的有
用信息如下:

堆栈的内容
执行 DEBUG_OP 的帧对象信息

所以呢,我们的操作码需要做的事情是:

找到回调函数
创建一个包含堆栈内容的列表
调用回调函数,并将包含堆栈内容的列表和当前帧作为参数传递给它

听起来挺简单的,现在开始动手吧!声明:下面所有的解释说明和代码是经过了
大量段错误调试之后总结得到的结论。首先要做的是给操作码定义一个名字和相
应的值,因此我们需要在
Include/ 中添加代码。

/** My own comments begin by '**' **//** From: Includes/ **//*
Instruction opcodes for compiled code *//** We just have to define our
opcode with a free value 0 was the first one I found **/#define DEBUG_OP
0#define POP_TOP 1#define ROT_TWO
2#define ROT_THREE 3

光环大数据
光环大数据--大数据培训&人工智能培训
-
这部分工作就完成了,现在我们去编写操作码真正干活的代码