Using PyGILState_Ensure

Ralf Riemer ralf.r_py at gmx.de
Tue Sep 20 13:03:50 EDT 2005


Hi,

I have some questions concerning the global interpreter lock:

I am working with Windows XP Professional Version 5.1, Python version 2.4.1
and Microsoft Visual C++.Net Version 7.1.
>From Python I call a function from a C++ dll using
calldll.call_foreign_function. This C++ function does a callback of a python
function.
Do get it running I use PyGILState_Ensure before PyEval_CallObject and
PyGILState_Release afterwards.
The code looks like this:

				static PyObject *my_callback = NULL;
				
				...

				// my_callback is set from Python using a function SetCallback
				...

				
                        /* Time to call the callback */
                        ppyobjArgList = Py_BuildValue("()", NULL);          
               
                        //General Interpreter Lock (essential for succesful
calling of any python function)
                        PyGILState_STATE gstate;
                        //Ensure that the current thread is ready to call
the Python C API 
                        gstate = PyGILState_Ensure();
                        
                        ppyobjResult = PyEval_CallObject(my_callback,
ppyobjArgList);
                        if (!((DWORD_PTR)ppyobjResult))
                        {
					//Error handling
					...
				} else {
					Py_DECREF(ppyobjResult);
				}
 
				Py_DECREF(ppyobjArgList);

                        PyGILState_Release(gstate);

Now my questions:
Are there any risks aquiring the global interpreter lock?
Do I invoke by PyEval_CallObject a new python process? (I suppose not)
How long my this call of PyEval_CallObject last? Are there restictions to
the code I use in the called function.
Is it allowed to force the thread to wait (by aquiring the GIL)?
Is there a risk that windows hangs up?
Doing several calls of my dll function with the callback, is there a risk
that the calls overlap and information gets lost?

Thanks for your help!
Ralf

-- 
Lust, ein paar Euro nebenbei zu verdienen? Ohne Kosten, ohne Risiko!
Satte Provisionen für GMX Partner: http://www.gmx.net/de/go/partner



More information about the Python-list mailing list