Python Embedding Thread

Benjamin musiccomposition at gmail.com
Mon Jul 21 22:43:13 EDT 2008


On Jul 21, 6:56 am, o... at tuningchannel.de wrote:
> Hi :)
>
> I want to run Python in my app. That works still fine. But my app
> supports now Threads and I would like to know what to do, that it runs
> without problems.
>
> PyGILState_Release and PyGILState_Ensure should solve the problem
> right? Where do I have to put this two commands around? between each
> Command that increase, decrease a reference?

Two threads should not be running through the Python VM concurrently
in the same process. The GIL has to be held *any* time you use the
Python API. When you want to release the GIL (to process something in
C), use PY_BEGIN_ALLOW_THREADS and PY_END_ALLOW_THREADS around the
places where threads can run.
>
> Currently, this is a small code-snippet that represents the part of
> the code-execution:
>
>                                 PyObject *f_globals=NULL, *f_locals=NULL, *mod=NULL, *rv=NULL;
>
>                                 mod = PyImport_ImportModule("__main__");
>                                 if (!mod)
>                                         return;
>
>                                 f_globals = PyModule_GetDict(mod);
>                                 f_locals = PyDict_New();
>                                 PyDict_Update(f_locals, f_globals);
>                                 if (!f_locals) {
>                                                 Py_DECREF(mod);
>                                                 PyErr_Print();
>                                                 return;
>                                 }
>
>                                 rv = PyRun_String(    <my code>  , Py_file_input, f_locals,
> f_locals);
>                                 if (!rv)
>                                         PyErr_Print();
>
>                                 Py_XDECREF(rv);
>                                 Py_DECREF(mod);
>                                 Py_DECREF(f_locals);
>                                 Py_DECREF(f_locals);
>
> Thanks a lot for your help :)




More information about the Python-list mailing list