python做压力测试,Python 压测
零,简介:特别感谢以下博客。我的博客是这个博客的学习笔记。
一类和三类文件:
1.pyc文件:编译py文件的二进制文件。
2.pyo文件:py编译的优化文件。
3.pyd文件:用其他语言编程的py库。
二。python编译过程:
Python不仅是描述性语言,还需要编译成字节码。然后模仿可执行文件的堆栈调用序列。编译后的字节码存储在pyc文件中,PVM从PyCodeObject中读取字节码,然后逐个执行。PyCodeObject存储字节码和进程上下文信息。Pyc文件导入后创建PyCodeObject对象,通常由py_compile模块操作。直接运行py文件不会生成pyc,但是可以从python -m xxx.py生成
一般来说,在OS上运行程序离不开进程和线程的概念。这两个概念都是用python模拟的。模拟进程和线程分别是PyInterpreterState和PyTreadState。这意味着每个PyThreadState都有一个帧栈,python虚拟机可以在多个线程之间切换。python开始运行时,会先进行一些初始化操作,最后进入PyEval_EvalFramEx函数。它的作用是不断读取编译好的字节码,CPU执行指令。函数内部主要是switch结构,不同的字节码执行不同的代码。
三。PyCodeObject结构:
1 typedef结构{ 2py object _ head 3 int co _ arg count;/*位置参数的数量*
4 int co _ nlocals/*局部变量的数量*
5 int co _ stacksize//堆栈大小/
6个intco _ flags7 PyObject * co _ code/*字节码指令字符串*
8 PyObject * co _ consts/*所有常数的集合*
9 PyObject * co _ names/*所有符号名称的集合*
10 PyObject * co _ varnames/*局部变量名称的集合*
11 PyObject * co _ freevars/*闭包的变量名集合*
12 PyObject * co _ cellvars/*内部嵌套函数引用的变量名集合*
13/* therestdoensn tcountforhash/CMP */
14 PyObject * co _ filename/*代码所在的文件名*
15 PyObject * co _ name/*模块名函数名类名*
16 int co _ firstlineno/*文件中代码块的第一行编号*
17 PyObject * co _ lnotab/*字节码指令和行号之间的对应关系*
18 void * co _ zombieframe/* foroptimizationonly(see frame object . c)/
19)pycodeobject;
引用的C语言PyCodeObject的结构
四。实施流程:
Python的原理是模拟可执行程序,在X86机器上运行。X86的运行时堆栈框架如下图所示。
用C语言实现test.py,如下图。
const char *s="hello "
void func () }
printf(12300;% s \ n ",s);
}
int main().
func(;
0;
}
Python的原理就是模拟上述行为。发生函数调用时,会创建一个新的堆栈框架,Python对应的实现是一个PyFrameObject对象。
PyFrameObject对象创建程序运行时的动态信息,即运行时环境。相关源代码大致如下。
typedef struct _frame{
PyObject_VAR_HEAD //“运行时堆栈”的大小不确定
struct _ frame * f _ back//执行环境链中的前面框架连接许多PyFrameObject,形成执行环境链表。
PyCodeObject * f _ code//PyCodeObject对象,此帧是此PyCodeObject对象的上下文。
PyObject * f _ builtins//内置命名空间
PyObject * f _ globals//全局命名空间
PyObject * f _ locals//本地命名空间
PyObject * * f _ valuestack//堆栈的底部位置“运行时堆栈”
PyObject * * f _ stacktop//栈顶位置的“运行时栈”
//.
int f _ lasti//f _ code中前一个字节码指令的偏移位置
int f _ lineno//当前字节码对应的源代码行
//.
//动态内存,需要维护的空间(运行时堆栈的局部变量cell对象集free对象集)
py object * f _ locals plus[1];
} PyFrameObject
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。