I'm getting an error output when I call the C-API's Py_Finalize() from a different C-thread than I made a python call on.
The error I'm seeing is: Exception ignored in: <module 'threading' from 'C:\\Python34-32\\Lib\\threading.py'> Traceback (most recent call last): File "C:\Python34-32\Lib\threading.py", line 1289, in _shutdown assert tlock.locked() AssertionError: Here's a minimal example that shows it happening when a C-thread is used, but not when everything happens on a single c-thread: ----------main.cpp-------------- #include <iostream> #include <fstream> #include <thread> #include <cassert> #include <Python.h> void make_file() { std::fstream file("my_test.py", std::ios::out); file << "import threading\n" << "def my_function():\n" << " pass\n" ; file.close(); } void exec() { PyGILState_STATE gstate = PyGILState_Ensure(); PyObject* pdict = PyDict_New(); PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins()); PyRun_String("import my_test", Py_file_input, pdict, pdict); PyRun_String("my_test.my_function()", Py_file_input, pdict, pdict); assert(!PyErr_Occurred()); PyGILState_Release(gstate); } void basic() { std::cout << "--Starting Basic--" << std::endl; Py_Initialize(); PyEval_InitThreads(); PyThreadState* threadState = PyEval_SaveThread(); exec(); PyEval_RestoreThread(threadState); Py_Finalize(); std::cout << "--Basic Complete--" << std::endl; } void with_thread() { std::cout << "--Starting With Thread--" << std::endl; Py_Initialize(); PyEval_InitThreads(); PyThreadState* threadState = PyEval_SaveThread(); std::thread t(exec); t.join(); PyEval_RestoreThread(threadState); Py_Finalize(); std::cout << "--With Thread Complete--" << std::endl; } int main(int argc, char* argv[]) { make_file(); basic(); with_thread(); return 0; } ----------main.cpp-------------- ----------output---------- --Starting Basic-- --Basic Complete-- --Starting With Thread-- Exception ignored in: <module 'threading' from 'C:\\Python34-32\\Lib\\threading.py'> Traceback (most recent call last): File "C:\Python34-32\Lib\threading.py", line 1289, in _shutdown assert tlock.locked() AssertionError: --With Thread Complete-- ----------output---------- The order of the basic()/with_thread() calls in main does not matter, I can even include those lines multiple times with no affect, each with_thread() call results in the error output. Thanks, Tom Kent -- https://mail.python.org/mailman/listinfo/python-list