python做压力测试,Python 压测

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: