A
andy
I embed multiple interpreters. I create the interpreter and modules in
the primary thread of my application:
PyEval_AcquireLock();
thread = Py_NewInterpreter();
PyThreadState_Swap(thread);
....initialize modules, etc....
PyThreadState_Swap(maininterpreter);
PyEval_ReleaseLock();
Then I create a C thread called "main" which calls a function called
"Main" in the Python interpreter:
PyEval_AcquireLock();
PyThreadState_Swap(thread);
moduledictionary = PyModule_GetDict(pmodule);
PyObject_CallObject(PyDict_GetItemString(moduledictionary, "Main"),
NULL);
PyThreadState_Swap(maininterpreter);
PyEval_ReleaseLock();
The problem is that the function "Main" in the Python script can take
up to 60 seconds to execute. How can I terminate this thread (and
therefore the Main function in python) cleanly from the primary thread
of my application?
If I try to call Py_EndInterpreter(thread); then I get a runtime error
(presumably because the Main function is still executing).
thanks, Andy
the primary thread of my application:
PyEval_AcquireLock();
thread = Py_NewInterpreter();
PyThreadState_Swap(thread);
....initialize modules, etc....
PyThreadState_Swap(maininterpreter);
PyEval_ReleaseLock();
Then I create a C thread called "main" which calls a function called
"Main" in the Python interpreter:
PyEval_AcquireLock();
PyThreadState_Swap(thread);
moduledictionary = PyModule_GetDict(pmodule);
PyObject_CallObject(PyDict_GetItemString(moduledictionary, "Main"),
NULL);
PyThreadState_Swap(maininterpreter);
PyEval_ReleaseLock();
The problem is that the function "Main" in the Python script can take
up to 60 seconds to execute. How can I terminate this thread (and
therefore the Main function in python) cleanly from the primary thread
of my application?
If I try to call Py_EndInterpreter(thread); then I get a runtime error
(presumably because the Main function is still executing).
thanks, Andy