CPython 源码阅读 - send/yield

本文代码取自 CPython 3.6.3, commit sha 为 2c5fed86e0cbba5a4e34792b0083128ce659909d 先放一个 Generator 的示例 def g(): yield 2 gen = g() 每一 Generator 对象都含有几个特别的属性,可以从万能的 inspect 模块的文档 中找到 gi_ »

GIL 究竟是什么

本文代码取自 CPython 3.6.3, commit sha 为 2c5fed86e0cbba5a4e34792b0083128ce659909d 本篇文章分析 Python 的多线程实现,侧重于 GIL 方面。由于本人 C 水平及 Python 水平有限,理解可能会有偏差,如果发现希望能够邮件告知 Abstract 先来看 GIL 的定义 »

CPython 源码阅读 - dict

本文所用代码取自 CPython 3.6.3 commit sha 2c5fed86e0cbba5a4e34792b0083128ce659909d 和 dict 相关的源码大致位于三个文件 Include/dictobject.h Objects/dict-common.h Objects/dictobject.c 首先确保阅读自带说明文件 Objects/dictnotes.txt,这里摘取部分的内容 dict »

MonkeyType 是如何获得运行时类型的

MonkeyType 项目能够从运行时收集函数参数和返回值的类型,以类型注解的方式添加到 Python 代码中。是不是感觉好爽,不过需要 Python 3.6+ 才行 How to use 先来看一下如何使用 # some/module.py def add(a, b): return a + b # myscript. »

Python threading.Barrier 的实现

threading.Barrier 是在 Python 3.2 中引入的。它作为一种线程同步机制,用于需要多个线程等待直到它们所有都到达 sync point 的场景。很惭愧,我从来没用过这玩意,所以趁此机会膜一下 示例代码 import threading import time NUM_THREADS = 3 def worker(barrier) »

从 namedtuple 到 Data Class

nameptuple namedtuple 在 Python 中一般用来做 record 使用,看一下 namedtuple 的源码实现,发现竟然是渲染的模板 (((゚д゚))) def namedtuple(typename, field_names, *, verbose=False, rename=False, module=None): # Validate the field »