admin@copie.cn 发布的文章

Context_Locals_In_Werkzeug

Context_Locals_In_Werkzeug在学习 Flask 的时候.为了看 Flask 上下文环境源码做准备.在上篇 blog 中我们已经看到了 threading.local 的使用.但是 Werkzeug.local.Local 类有一下优点在 Greenlet 可用的情况下优先使用 Greenlet 的 ID 而不是线程的 ID 以支持 Gvent 或者 Eventlet ...

admin@copie.cn 2018 年 05 月 23 日 暂无评论

Python 中 Thread Local 总结

Python 中 Thread Local 总结有时候在多线程程序中,我们需要保存专属于当前运行线程的状态.为了做到这一点,可以通过 threading.local() 来创建一个线程本地存储对象,在这个对象上保存和读取的属性对当前运行的线程可见, 其他线程无法感知.Thread Localimport threading from functools import partial from...

admin@copie.cn 2018 年 05 月 20 日 暂无评论

WSGI协议的原理及实现

WSGI协议的原理及实现WSGI, 是 Python Web Server Geteway Interface 的简称, 是 web 底层跟 application 解耦的协议. 我们的 web 服务器使用 WSGI 协议来调用 application 称为 WSGI server. 为了各类 web server(apache nginx, IIS) 和 web application(如...

admin@copie.cn 2018 年 05 月 19 日 暂无评论

malloc,calloc,realloc 函数之间的区别

malloc,calloc,realloc 函数之间的区别在 C 语言中内存可以分为五个区域: 堆, 栈, 全局/静态存储区, 常量存储区和自由存储区.栈区(stack): 函数执行时, 局部变量, 函数形参, 和临时变量都是在栈区获得内存,由编译器自动完成的, 函数执行结束时这些存储单元自动被释放.栈内存的分配运算内置于处理器指令集中,效率很高,但分配的内存容量有限;堆区(heap): 一...

admin@copie.cn 2018 年 05 月 15 日 暂无评论

Python内核源码阅读(十八)

Python内核源码阅读(十八)Python 对原程序编译结果生成一个 .pyc 文件. Python 对 .py 文件的编译结果是字节码,为了能重复使用而不需要重新编译才有了写成 .pyc 文件. 对于解释器来说 PyCodeObject 对象才是真正的编译结果, pyc 文件只是这个对象在硬盘上的表现形式.PyCodeObject/* Bytecode object */ typedef...

admin@copie.cn 2018 年 05 月 14 日 暂无评论

Python内核源码阅读(十七)

Python内核源码阅读(十七)PyDictObject插入元素/* CAUTION: PyDict_SetItem() must guarantee that it won't resize the * dictionary if it's merely replacing the value for an existing key. * This means that it's sa...

admin@copie.cn 2018 年 05 月 13 日 暂无评论

hash冲突解决方法总结

hash冲突解决方法总结我们知道在两个不相等的 key 通过hash函数获得相同的 hash值, 这个时候我们就要结局 hash表中的 hash冲突.开放定址法开放定址法就是一旦发生了冲突, 就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入.线性探测法公式为:fi(key) = (f(key) + di) MOD m (di=1,2,3,4,......,m-...

admin@copie.cn 2018 年 05 月 12 日 暂无评论

Python内核源码阅读(十六)

Python内核源码阅读(十六)字典对象的操作字典对象的类型 PyDict_TypePyTypeObject PyDict_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) "dict", sizeof(PyDictObject), 0, (destructor)dict_dea...

admin@copie.cn 2018 年 05 月 12 日 暂无评论

Python内核源码阅读(十五)

Python内核源码阅读(十五)字典对象的创建字典对象通过 PyDict_new 方法来创建.PyObject * PyDict_New(void) { // #define PyDict_MINSIZE 8 默认情况下会创建 8 个 entry PyDictKeysObject *keys = new_keys_object(PyDict_MINSIZE); if ...

admin@copie.cn 2018 年 05 月 11 日 暂无评论

Python内核源码阅读(十四)

Python内核源码阅读(十四)dict 的存储方式Python3 的 dict 对象 PyDictObject:typedef struct _dictkeysobject PyDictKeysObject; /* The ma_values pointer is NULL for a combined table * or points to an array of PyObjec...

admin@copie.cn 2018 年 05 月 10 日 暂无评论

Python内核源码阅读(十三)

Python内核源码阅读(十三)Python 中 PyDictObject 采用了散列表.这是一种表现为存储形式如 key:value(键值对)的数据的数据结构,用户通过索引 Key 来获取对应的 value 值. 对于数组或者 list 来说,内部数据只能通过数字下标获取,但在 dict 中, key 则可以是 Python 下任意的对象.Hash TablePython 中 dict 对...

admin@copie.cn 2018 年 05 月 09 日 暂无评论

Python内核源码阅读(十二)

Python内核源码阅读(十二)PyListObject 设置元素在完成类似于 list[index] = new_list_item 的操作时, Python 内部会调用 PyList_SetItem.但是我在 PyList_SetItem 标记没有成功.int PyList_SetItem(PyObject *op, Py_ssize_t i, PyObje...

admin@copie.cn 2018 年 05 月 09 日 暂无评论