Я пытаюсь определить, изменяет ли контекстный менеджер Python mock.patch
(unittest.mock.patch
в Py3) глобальное состояние, то есть является ли он потокобезопасным.
Например: давайте представим, что один поток исправляет функцию bar
внутри функции foo
с помощью диспетчера контекста, а затем внутри диспетчера контекста интерпретатор приостанавливает этот поток (из-за GIL и т. д.) и возобновляет другой поток, который работает foo
вне указанного диспетчера контекста. . Если patch
является потокобезопасным, я ожидаю, что глобальное состояние функций foo
и bar
не изменится, и поэтому второй поток получит нормальное поведение foo
. Но если patch
изменяет глобальное состояние, второй поток получит измененное поведение foo
, даже если он не находится внутри диспетчера контекста.
Я сослался на исходный код, но не смог четко сказать, просто взглянув на него.