C++ and Python
Gordon McMillan
gmcm at hypernet.com
Tue Aug 31 14:38:56 EDT 1999
Sven Drescher writes:
>
> I have a little problem. It's really urgent. I wrote a program with
> threads. One thread is the Python/Tk loop with my graphical user
> interface and the other is an work thread.
>
> Now my question:
> How can I get the entrie-variables of python in my work thread.
>
> I know such functions like PyArg_ParseTuple and so on to convert the
> values, but is there a possibility to have an C-reference variable
> to a python variable or so?
Short answer: "no".
Problem 1: Difference between reference semantics and slot
semantics.
foo = "I'm a string"
foo = foo + ", but now I'm longer"
In C, the first foo has no relationship to the second. In a case like
this (references to immutables where the reference may change), you
have to look up "foo" in the appropriate dictionary.
Problem 2: scope. What dictionary does it live in?
Well, I think we can assume you're only talking about globals. In
which case, the longer answer is "yes, sort of". You can of a
module's dictionary in your C code and look things up in it. You
could even optimize this (only look it up once) for those cases where
you know the reference doesn't change, but that's a bit risky:
a = []
a.append(3) # reference doesn't change
a = a[:] # oops, reference changed.
As long as you don't release the interpreter lock in your C code, you
won't have to worry much about race conditions (everything you do
will be atomic as far as Python is concerned). If you do release the
interpreter lock, make sure any Python variables are in a consistent
state, and don't touch them until you've re-aquired the lock.
- Gordon
More information about the Python-list
mailing list