我正在尝试确定 Python 的mock.patch
(unittest.mock.patch
在 Py3 中)上下文管理器是否会改变全局状态,即它是否是线程安全的。
例如:让我们想象一个线程使用上下文管理器在函数bar
内修补函数foo
,然后在上下文管理器内部,解释器暂停该线程(由于 GIL 等)并恢复另一个foo
在所述上下文管理器之外运行的线程。如果patch
是线程安全的,我希望函数的全局状态foo
和bar
未修改,因此第二个线程将获得foo
. 但是如果patch
修改全局状态,第二个线程将获得修改后的行为,foo
即使它不在上下文管理器中。
我参考了源代码,但仅通过查看无法清楚地分辨出来。