469,945 Members | 2,014 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,945 developers. It's quick & easy.

Multi Threading embedded python

Hello,

I am embedding a python script in a C++ application. The script can be
called simultaneously from multiple threads.

What is the correct way to implement this situation:

1) Have unique python interpreter instantiations ( Py_Initialize() ) for
each thread.

2) Have one python interpreter, and implement a lock on it so it can't
be called simultaneously by multiple threads?

Thanks
Amit
Jul 19 '05 #1
1 3281
Well, depends on what you want to achieve :)

First, I don't think you can call Py_Initialize on many threads. You
have special function to initialise different interpreters on per-thread
basis.

However, the main problem is: do you want to share data across your
threads ? If the answer is 'no' then use one interpreter by thread, this
is, by far, the simplest solution (and the most efficient ?).

But if you *do* need to share data, then you are in big trouble man :)
As far as I tried it, multi-threading and Python don't go along very
well ! At least, not with system-threads. Basically, to run some Python
code, you have to hold the GIL (Global Interpreter Lock) and you cannot
*test* it, you have to try holding it, so be prepare to block your
threads that would want to access Python !

What I would recommend (and that's what I do in my own software) is to
use a single thread in which your Python interpreter is running. Then,
use a message system in C++ to send commands and get them evaluated and
sent back (if needed). By doing so, you'll avoid a lot of problems, and
you won't loose significantly performances (or if you care about that,
then Python is definitly not the language you need) nor parrallelism
(you wouldn't be able to run many Python threads at the same time anyways).

Well, I hope that help,

Pierre

amit a écrit :
Hello,

I am embedding a python script in a C++ application. The script can be
called simultaneously from multiple threads.

What is the correct way to implement this situation:

1) Have unique python interpreter instantiations ( Py_Initialize() ) for
each thread.

2) Have one python interpreter, and implement a lock on it so it can't
be called simultaneously by multiple threads?

Thanks
Amit

Jul 19 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

7 posts views Thread by Wenning Qiu | last post: by
37 posts views Thread by ajikoe | last post: by
1 post views Thread by Carl Waldbieser | last post: by
14 posts views Thread by danfan1981 | last post: by
14 posts views Thread by Akihiro KAYAMA | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.