Безопасность потоков в методах метаклассов python __call__, __new__ и __init__ - PullRequest
1 голос
/ 17 марта 2020

Насколько я понимаю, методы __new__ и __init__ метакласса python вызываются при создании объекта класса класса, который объявил метакласс. Следовательно, эти методы будут вызываться только один раз для каждого отдельного класса (FQN). Это понимание правильно?

Являются ли эти вызовы __new__ и __init__ потокобезопасными? Это из-за GIL или какого-то другого механизма в интерпретаторе, который гарантирует, что только один поток может вызывать методы __new__ и / или __init__ метакласса (для одного и того же объекта класса - или FQN?).

Я немного новичок в python, и моё понимание волхвов c, которое python делает под капотом, довольно ограничено - сказав это - для каждого полностью квалифицированное имя класса, я думаю, что в памяти должен быть только один объект класса. Так как же python гарантирует это, когда метакласс вызывается во время процесса создания объекта класса в многопоточном сценарии?

...