C + + calls Python, the bottom layer seems to fork a child process to start a Python interpreter, execute a python file, because the Python interpreter maintains an internal state, so if the C + + program is multi-threaded, each thread calls Python, Then Python will get an error, and the solution is to add a global lock to the Python interpreter in the main thread. When a thread calls Python, the other thread waits. The problem arises throughout C + + if the logic is inside Python, that C + + multithreading will lose its meaning.
= Pythreadstate_get (); Pyeval_releaselock (); // TODO Start Multithreading pygilstate_ensure (); Py_finalize ();
In the method called by each child thread (calling Python), you need to get a Python global lock first:
Pythonexecthrlock _pylock; // The lock is released after the method execution completes
C + + thread calls Python