禁止通行——如何让 itertools.tee 线程安全

谢乾坤|青南 at 
禁止通行——如何让 itertools.tee 线程安全的配图
在上一篇文章中,我们说到了,itertools.tee 不是线程安全的,并给出了一个例子,如下图所示:在两个线程里面同时运行分裂出来的生成器对象,就会导致报错。现在,你想看看 itertools.tee 的源代码,但是你会发现,在 PyCharm 里面,它的源代码如下图所示:这是因为,在 CPython 中,itertools.tee 底层是通过 C 语言实现的,所以你不能在 PyCharm 中看到它的源代码。但是你可以通过阅读 Python 的源代码中的 Modules/itertoolsmodule.c 文件,找到它的实现算法。导致问题的核心部分在如下图所示的两段代码中:大家看不懂也没有关……