python internal
文章平均质量分 95
关于 cpython 内部实现的个人记录
zp0int
这个作者很懒,什么都没留下…
展开
-
gunicorn workers 区别(sync/eventlet/gevent/thread/tornado)
gunicorn workers 区别以后都在 github 更新,请戳 gunicorn workers 区别我们在 第一篇 里已经了解过 gunicorn 的 SyncWorker 原理, 现在我们来看下其他的 workers 是如何工作的目录eventletgeventthreadtornado更多资料Eventlet如果你打开 eventlet 的官网Eventlet 是一个 Python 网络库, 支持并发访问, 使用这个库可以在不改变代码写法的情况下更改代码的运行方原创 2021-08-04 23:51:39 · 5255 阅读 · 0 评论 -
django 和 gunicorn
django gunicorn gevent greenlet daphne 他们是什么?以后都在 github 更新,请戳 第一篇 django 和 gunicorn第一篇 django 和 gunicorn如果你进行过基于 Python 的 web 应用开发, 你会发现网络上能搜到许多不同的框架和组件如果你接手过其他团队成员的项目, 你会发现虽然都是 Python 代码, 但是同样有各种各样的组件和 W(A)SGI 库”喔这是 django 应用, 我用下面这行命令就可以启动了 python原创 2021-06-28 23:56:34 · 971 阅读 · 2 评论 -
python3 pickle 源码分析/实现
pickle 实现以后都在 github 更新,请戳 python3 pickle 实现目录相关位置文件简介实现Noneboolintfloatbytesstrtuplelisttypeobject相关位置文件Lib/pickle.pyModules/_pickle.cModules/clinic/_pickle.c.h简介我们用 pickle 来对 python 中的对象进行序列化和反序列化, pickle 总共有好几个版本, 当前的版本号是 4p原创 2021-05-16 15:10:29 · 601 阅读 · 5 评论 -
Python 编译阶段 -- 从 AST 到 字节码
AST 到 字节码以后都在 github 更新,请戳 AST 到 字节码目录related fileoptimizesymtableCodeObjectread more相关位置文件Python/compile.cPython/pythonrun.cPython/symtable.cInclude/symtable.hPython/ast_opt.c我们来尝试从之前的 语法树 中生成对应的字节码前面提到过的 pythonrun 的调用栈如下这次原创 2020-07-23 18:20:03 · 665 阅读 · 0 评论 -
Python 编译阶段 -- 从 CST 到 AST
CST TO AST以后都在 github 更新,请戳 CST 到 AST目录相关位置文件pythonrunCST 到 AST更多资料相关位置文件Python/ast.cPython/pythonrun.cInclude/Python-ast.hPython/Python-ast.cPython/asdl.cInclude/asdl.h下面的命令会从 Parser/Python.asdl 中生成 Include/Python-ast.h 和 Python/Python-a原创 2020-07-23 00:21:00 · 898 阅读 · 0 评论 -
Python 编译阶段 -- 从语法/元语法到DFA
compile以后都在 github 更新,请戳 从语法/元语法到DFA目录相关位置文件pgenthe dfa of ExampleGrammarparsemake dfa更多资料相关位置文件Python/pythonrun.cParser/tokenizer.cParser/tokenizer.hParser/parsetok.cInclude/grammar.hParser/metagrammar.cInclude/metagrammar.hPar原创 2020-07-21 09:50:57 · 530 阅读 · 0 评论 -
python 性能分析和 C 扩展
python 性能分析和 C 扩展以后都在 github 更新,请戳 python 性能分析和 C 扩展目录概览示例性能分析C 模块python2python3更多资料概览最近我在做一个关于优化之前其他人写好的 API 业务接口的任务, 这个接口是在 Django 服务中编写的, 这个 API 会启动一个异步任务, 这个异步任务有时需要好几分钟才能结束, 在这...原创 2019-07-29 15:50:40 · 175 阅读 · 0 评论 -
python __slots__
slot以后都在 github 更新,请戳 python __slots__目录相关位置文件slot示例实例属性访问访问实例属性wing设置了值之前设置了值之后访问实例属性x类属性访问访问类属性wing访问类属性x不同有slots在创建 class A 时属性是如何初始化的 ?在创建 instance a 时属性是如何初始化的 ?MRO中...原创 2019-07-19 18:16:05 · 196 阅读 · 0 评论 -
python 字符串对象 底层实现 源码分析 str/unicode
str以后都在 github 更新,请戳 cpython str/unicode 底层实现解析目录相关位置文件内存构造字符串转换internedkindunicodecompact相关位置文件cpython/Objects/unicodeobject.ccpython/Include/unicodeobject.hcpython/Include/cpython...原创 2019-04-20 22:46:41 · 1172 阅读 · 0 评论 -
python 源码分析 基本篇
以后都在 github 更新,请参考Cpython Internals版本第一步克隆 Cpython 仓库到本地, 切换到我当前的版本, 我当前的版本号是3.8.0a0git clone https://github.com/python/cpython.gitgit reset --hard ab54b9a130c88f708077c2ef6c4963b632c132b...原创 2019-02-03 13:10:24 · 9542 阅读 · 2 评论 -
python 的垃圾回收机制(Garbage Collection)
以后都在 github 更新,请参考python 垃圾回收最近读了一些关于 Python 内部实现的博客,其中有几篇关于Garbage Collection 的,在此分享一下对于比较小块的内存(比如小于等于512bytes), 当你认为这个对象所占的内存需要被解释器回收时,解释器实际上不会对这块内存进行回收,而是保留起来,下次使用。这有点像 C++ 的默认的 std::alloc...原创 2019-01-02 18:08:40 · 2656 阅读 · 0 评论 -
python 字典对象 底层实现 源码分析 PyDictObject(dict)
PyDictObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考图解python dictdict 顾名思义是字典,通常来讲一个字典对象都是通过 HashTable 实现,HashTable 里面有一排桶,根据哈希算法不同的 key 映射到不同的或者相同的桶的位置,然后把 key/value 对存储到...原创 2019-03-11 18:13:31 · 1280 阅读 · 0 评论 -
python 列表对象 底层实现 源码分析 PyListObject(list)
PyListObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考图解 python list用过python 的童鞋都知道 python 内建了好几种数据结构,其中一种就是 list,你可以通过如下的方法定义一个 lista = []b = []c = list((1, 2, 3))d = c...原创 2019-02-14 16:14:48 · 1190 阅读 · 0 评论 -
python bytes对象 底层实现 源码分析 PyBytesObject(bytes)
PyBytesObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考图解python bytes我们都知道在 python 中有以下两个对象可以表示 字节(bytes)a = bytes(b"\x1cccc")print(a) # b'\x1cccc'b = bytearray(b"\x1c...原创 2019-03-18 17:45:20 · 1435 阅读 · 0 评论 -
python bytearray 对象 底层实现 源码分析 PyByteArrayObject(bytearray/buffer protocol)
PyByteArrayObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考图解python bytearray我们都知道在 python3 中,bytes和 unicode 两种不同的对象被严格的区分开来,byte就是表示字节数组,并且是不可变的字节数组,你不能改变bytes 和 unicode...原创 2019-03-15 18:17:47 · 1186 阅读 · 0 评论 -
python 整型对象 底层实现 源码分析 PyLongObject(int)
PyLongObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考图解python int在当前的版本中,cpython只有 long 和 float 两个类型来保存数字,一个保存整数,一个保存浮点数,而用来保存整数的这里叫做PyLongObject,他是一个容器对象,我们来看下他的 memory l...原创 2019-03-14 18:19:20 · 738 阅读 · 0 评论 -
python 集合对象 底层实现 源码分析 PySetObject(set)
PySetObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考图解 python setset 的实现方式和 dict 有点类似,但是稍微简单一些,我们来看看 set 的 memory layout我们来看下set_lookkey 这个函数/* Objects/setobject.c...原创 2019-03-12 18:34:46 · 829 阅读 · 0 评论 -
python 元组对象 底层实现 源码分析 PyTupleObject(tuple)
PyTupleObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考图解python tuplepython 的内建对象除了 list 这个可变的数据结构,还有 tuple 这个不可变的数据结构,不可变的意思是这个 tuple 的长度在创建的时候就是恒定的,不能增加/删除元素,但是 tuple 里面存储的对象...原创 2019-03-13 18:43:39 · 2681 阅读 · 1 评论 -
python 栈帧对象 frame 底层实现 源码分析 PyFrameObject
PyFrameObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考图解 python frameframe一个 c 文件会被编译器最终转换成二进制文件,这个二进制文件文件里面的指令是 cpu 指令,具体的指令内容因 cpu 而异,一般的编译器过程会把源代码转换成中间结构(IR), 同样的程序在不同的机...原创 2019-02-06 13:57:01 · 4096 阅读 · 1 评论 -
python code对象 底层实现 源码分析 PyCodeObject
PyCodeObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考详解 python code在编译好的 c 程序里面,code object 可以理解成一段二进制的数据,每一个字节都有与之对应的机器指令,Program Counter 在对应的程序的代码段上,按照顺序执行机器指令,这个程序就能按照作...原创 2019-02-10 01:13:11 · 783 阅读 · 0 评论 -
python 迭代器 底层实现 源码分析 PyGenObject(generator)
PyGenObject本文参考的是3.8.0a0 版本的代码,详见cpython 源码分析 基本篇以后都在 github 更新,请参考图解 python generator用过 python 的同学都知道 python 内置了一个类型叫做 generator, 翻译过来是迭代器/生成器generator 也是一种设计模式,在其他语言里面,只要能记录下函数/某个算法运行的状...原创 2019-02-12 22:54:34 · 1058 阅读 · 0 评论