G
googler.1.webmaster
Hi 
I have a main() function of my app which intializes the Python
Interpreter and some other stuff. When I am finished I call:
PyGILState state = PyGILState_Ensure()
//call PyRun_String()
PyGILStateRelease(state);
The first question is, I found out the API contains other commands lik
PyEval_AcquireLock(). I don't really understand if I have to use them
too, could anyone explain? Thanks.
Okay, back to topic. In PyRun_String() I call a wrapped function. This
wrapped function does some internal calculations and takes a pointer
to another function which is called in another thread while it
calculates the stuff.
void MyProgressbar(Real p, void* hook) // this function wil be called
in another thread
{
PyGILState_STATE gilstate = PyGILState_Ensure();
PyObject* func = (PyObject*)hook;
//do some python stuff
PyGILState_Release(gilstate)
}
PyObject *pyMyFunction(PyObject *pSelf, PyObject *args, PyObject
*keywords)
{
static char *kwlist[] = {"hook", NULL};
PyObject *hook=NULL;
if (!PyArg_ParseTupleAndKeywords(args, keywords, "O!", kwlist,
&PyFunction_Type, &hook))
return NULL;
LONG ok = MyFunction(myprogress, hook); //hook is a pointer which
is passed to the threaded function.
Py_RETURN_INT(ok);
}
I want to do the same in Python. I want to pass a reference of a
function to the function which is called from the other thread. But it
stops (not crash) here: PyGILState_STATE gilstate = PyGILState_Ensure
();
What can I do? Thank you very much.
I have a main() function of my app which intializes the Python
Interpreter and some other stuff. When I am finished I call:
PyGILState state = PyGILState_Ensure()
//call PyRun_String()
PyGILStateRelease(state);
The first question is, I found out the API contains other commands lik
PyEval_AcquireLock(). I don't really understand if I have to use them
too, could anyone explain? Thanks.
Okay, back to topic. In PyRun_String() I call a wrapped function. This
wrapped function does some internal calculations and takes a pointer
to another function which is called in another thread while it
calculates the stuff.
void MyProgressbar(Real p, void* hook) // this function wil be called
in another thread
{
PyGILState_STATE gilstate = PyGILState_Ensure();
PyObject* func = (PyObject*)hook;
//do some python stuff
PyGILState_Release(gilstate)
}
PyObject *pyMyFunction(PyObject *pSelf, PyObject *args, PyObject
*keywords)
{
static char *kwlist[] = {"hook", NULL};
PyObject *hook=NULL;
if (!PyArg_ParseTupleAndKeywords(args, keywords, "O!", kwlist,
&PyFunction_Type, &hook))
return NULL;
LONG ok = MyFunction(myprogress, hook); //hook is a pointer which
is passed to the threaded function.
Py_RETURN_INT(ok);
}
I want to do the same in Python. I want to pass a reference of a
function to the function which is called from the other thread. But it
stops (not crash) here: PyGILState_STATE gilstate = PyGILState_Ensure
();
What can I do? Thank you very much.