C++ Binding with Threads

Pablo Yabo pablo.yabo at gmail.com
Tue Aug 28 15:34:57 CEST 2007

I've found a workaround for me project that I'll share.
The solution is to release the interpreter lock when a function of my wapper
is called, I mean from Python a function of C++ is called so I released the
interpreter lock and take it before returning to Python.
It's important to provide Sleep functions in your C++ code. Otherwise,
multi-threading will not work at all. If most of the work is done in your
C++ code, using this workaround will solve the issue.

To make it easier I've wrote a class to create an instance at the beginning
of each wrapped function.

Here is the constructor / destructor:

    PythonMgr *mgr = PythonMgr::instance();

    _state = PyThreadState_Get();


    PythonMgr *mgr = PythonMgr::instance();


Pablo Yabo

On 8/13/07, Pablo Yabo <pablo.yabo at gmail.com> wrote:
> Hello,
> I want to embed Python in an application and use an API of the application
> from Python.
> The application uses a library that creates several threads and I the
> users of the application will write Python scripts handling this events.
> The problem is that I having problems with threads. I saw that I have to
> PyEval_InitThreads and then PyThreadState_New and PyThreadState_Swap from
> the new thread but this way to solve the problem doesn't work for me because
> I need to let 2 or more threads run at the SAME time.
> The interpreter lock doesn't let them run at the same time so I'm looking
> for another solution. I saw Py_NewInterpreter and I tried to use it but it
> doesn't work if I don't keep the lock.
> Can anyone help me to solve this issue or tell me 'Forget it!'?
> Thanks on advance,
> Pablo Yabo
> --
> http://www.nektra.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20070828/070bdf88/attachment.html>

More information about the Python-list mailing list