New submission from Chris Morton <chrisgmor...@yahoo.com>:
Building code on Mac OSX or Linux Ubuntu 16.04 #include <Python.h> #include <thread> #include <chrono> #include <iostream> // MacOSX build: // g++ stop.cpp -I <prod root dir>/include/pythonX.X -L <prod root dir>/lib -lpythonX.X -o stop // Linuxe requires addtional linkage: // -lpthread void RunPythonScript() { PyRun_SimpleString("# import sys \n" "import time \n" "# sys.setcheckinterval(-1) \n" "while True: \n" " print('Running!') \n" " time.sleep(1) \n" ); std::cout << "Terminating Python Interpreter." << std::endl; } int Stop(void *) { std::cout << "We threw an exception." <<std::endl; PyErr_SetInterrupt(); PyErr_SetString(PyExc_RuntimeError, "Stop Python Execution."); return -1; } int main (int argc, char *argv[]) { Py_Initialize(); // The Python Interpreter must be created in the main thread. std::thread th(&RunPythonScript); // Now execute our python scipt in a thread. std::cout << "Python has started!" << std::endl; std::this_thread::sleep_for(std::chrono::seconds(5)); std::cout << "Asking Python to exit." << std::endl; PyGILState_STATE state = PyGILState_Ensure(); int r = Py_AddPendingCall(&Stop, NULL); // inject our Stop routine std::cout << r <<std::endl; PyGILState_Release(state); th.join(); // Wait for the thread to catch up. Py_Finalize(); std::cout << "Exiting Main Function." << std::endl; std::this_thread::sleep_for(std::chrono::seconds(2)); return 0; } Linking against 3.6 and executing leads to the successful interruption of Python code execution: Python has started! Running! Running! Running! Running! Running! Asking Python to exit. 0 We threw an exception. Traceback (most recent call last): File "<string>", line 6, in <module> RuntimeError: Stop Python Execution. Terminating Python Interpreter. Exiting Main Function. The Stop function is never called with the same code linked against Python 3.8. ---------- components: C API messages: 388559 nosy: chrisgmorton priority: normal severity: normal status: open title: PyAddPendingCall Function Never Called in 3.8, works in 3.6 versions: Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue43482> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com