Code to reproduce: Py_Initialize(); Py_FinalizeEx(); Py_Initialize(); Py_FinalizeEx(); First initialisation of main interpreter GIL during Py_Initialize(): static void create_gil(struct _gil_runtime_state *gil) { MUTEX_INIT(gil->mutex); > vfbasics.dll!AVrfpRtlInitializeCriticalSection() Unknown python312_d.dll!create_gil(_gil_runtime_state * gil) Line 240 C python312_d.dll!init_own_gil(_is * interp, _gil_runtime_state * gil) Line 524 C python312_d.dll!_PyEval_InitGIL(_ts * tstate, int own_gil) Line 545 C python312_d.dll!init_interp_create_gil(_ts * tstate, int own_gil) Line 604 C python312_d.dll!pycore_create_interpreter(pyruntimestate * runtime, const PyConfig * src_config, _ts * * tstate_p) Line 652 C python312_d.dll!pyinit_config(pyruntimestate * runtime, _ts * * tstate_p, const PyConfig * config) Line 887 C python312_d.dll!pyinit_core(pyruntimestate * runtime, const PyConfig * src_config, _ts * * tstate_p) Line 1056 C python312_d.dll!Py_InitializeFromConfig(const PyConfig * config) Line 1251 C python312_d.dll!Py_InitializeEx(int install_sigs) Line 1289 C python312_d.dll!Py_Initialize() Line 1300 C ConsoleApplication.exe!main() Line 30 C++ Defer finalisation of main interpreter GIL during Py_FinalizeEx(): static void finalize_interp_delete(PyInterpreterState *interp) { /* Cleanup auto-thread-state */ _PyGILState_Fini(interp); /* We can't call _PyEval_FiniGIL() here because destroying the GIL lock can fail when it is being awaited by another running daemon thread (see bpo-9901). Instead pycore_create_interpreter() destroys the previously created GIL, which ensures that Py_Initialize / Py_FinalizeEx can be called multiple times. */ > python312_d.dll!finalize_interp_delete(_is * interp) Line 1746 C python312_d.dll!Py_FinalizeEx() Line 1943 C ConsoleApplication.exe!main() Line 31 C++ Set interp->ceval.gil = NULL for _PyRuntime._main_interpreter during second Py_Initialize(): if (runtime->_initialized) { // Py_Initialize() must be running again. // Reset to _PyRuntimeState_INIT. memcpy(runtime, &initial, sizeof(*runtime)); } > python312_d.dll!_PyRuntimeState_Init(pyruntimestate * runtime) Line 471 C python312_d.dll!_PyRuntime_Initialize() Line 119 C python312_d.dll!Py_InitializeEx(int install_sigs) Line 1273 C python312_d.dll!Py_Initialize() Line 1300 C ConsoleApplication.exe!main() Line 32 C++ (Re-)initialise interp->_gil for _PyRuntime._main_interpreter during second Py_Initialize(): static void _gil_initialize(struct _gil_runtime_state *gil) { _Py_atomic_int uninitialized = {-1}; gil->locked = uninitialized; gil->interval = DEFAULT_INTERVAL; } > python312_d.dll!_gil_initialize(_gil_runtime_state * gil) Line 225 C python312_d.dll!_PyEval_InitState(_is * interp, void * pending_lock) Line 961 C python312_d.dll!init_interpreter(_is * interp, pyruntimestate * runtime, __int64 id, _is * next, void * pending_lock) Line 684 C python312_d.dll!PyInterpreterState_New() Line 777 C python312_d.dll!pycore_create_interpreter(pyruntimestate * runtime, const PyConfig * src_config, _ts * * tstate_p) Line 619 C python312_d.dll!pyinit_config(pyruntimestate * runtime, _ts * * tstate_p, const PyConfig * config) Line 887 C python312_d.dll!pyinit_core(pyruntimestate * runtime, const PyConfig * src_config, _ts * * tstate_p) Line 1056 C python312_d.dll!Py_InitializeFromConfig(const PyConfig * config) Line 1251 C python312_d.dll!Py_InitializeEx(int install_sigs) Line 1289 C python312_d.dll!Py_Initialize() Line 1300 C ConsoleApplication.exe!main() Line 32 C++ Deferred call to _PyEval_FiniGIL() during second Py_Initialize() detects interp->ceval.gil = NULL for _PyRuntime._main_interpreter and skips call to destroy_gil(): void _PyEval_FiniGIL(PyInterpreterState *interp) { struct _gil_runtime_state *gil = interp->ceval.gil; if (gil == NULL) { /* It was already finalized (or hasn't been initialized yet). */ assert(!interp->ceval.own_gil); return; } > python312_d.dll!_PyEval_FiniGIL(_is * interp) Line 561 C python312_d.dll!init_interp_create_gil(_ts * tstate, int own_gil) Line 598 C python312_d.dll!pycore_create_interpreter(pyruntimestate * runtime, const PyConfig * src_config, _ts * * tstate_p) Line 652 C python312_d.dll!pyinit_config(pyruntimestate * runtime, _ts * * tstate_p, const PyConfig * config) Line 887 C python312_d.dll!pyinit_core(pyruntimestate * runtime, const PyConfig * src_config, _ts * * tstate_p) Line 1056 C python312_d.dll!Py_InitializeFromConfig(const PyConfig * config) Line 1251 C python312_d.dll!Py_InitializeEx(int install_sigs) Line 1289 C python312_d.dll!Py_Initialize() Line 1300 C ConsoleApplication.exe!main() Line 32 C++ First initialisation of main interpreter GIL during second Py_Initialize() call, causing Application Verifier error: static void create_gil(struct _gil_runtime_state *gil) { MUTEX_INIT(gil->mutex); vrfcore.dll!VerifierStopMessageEx() Unknown vfbasics.dll!AVrfpInitializeCriticalSectionCommon() Unknown > python312_d.dll!create_gil(_gil_runtime_state * gil) Line 240 C python312_d.dll!init_own_gil(_is * interp, _gil_runtime_state * gil) Line 524 C python312_d.dll!_PyEval_InitGIL(_ts * tstate, int own_gil) Line 545 C python312_d.dll!init_interp_create_gil(_ts * tstate, int own_gil) Line 604 C python312_d.dll!pycore_create_interpreter(pyruntimestate * runtime, const PyConfig * src_config, _ts * * tstate_p) Line 652 C python312_d.dll!pyinit_config(pyruntimestate * runtime, _ts * * tstate_p, const PyConfig * config) Line 887 C python312_d.dll!pyinit_core(pyruntimestate * runtime, const PyConfig * src_config, _ts * * tstate_p) Line 1056 C python312_d.dll!Py_InitializeFromConfig(const PyConfig * config) Line 1251 C python312_d.dll!Py_InitializeEx(int install_sigs) Line 1289 C python312_d.dll!Py_Initialize() Line 1300 C ConsoleApplication.exe!main() Line 32 C++