[C++-sig] Fatal Python errors related to virtual methods
Patrick Hartling
patrick at vrac.iastate.edu
Tue Apr 15 17:41:23 CEST 2003
David,
Thank you very much for this insight. My Python/C knowledge is quite
limited (I dove into Boost.Python without having background in Python/C),
and I didn't know about the GIL. This sounds very promising. If I do
come up with a helpful "formula" for you, I'll be sure to pass it on.
-Patrick
David Abrahams wrote:
> Patrick Hartling <patrick at vrac.iastate.edu> writes:
>
>
>>The C++ application framework I am mixing with Python is
>>multi-threaded, and the Python object has its methods invoked from a
>>spawned thread (as is evident from the stack trace above). I saw a
>>message or two on comp.lang.python that led me to believe that threads
>>may be an issue. I don't know for sure, though.
>
>
> It certainly is /an/ issue. Can't say for sure if it's /the/ issue.
>
> Here's what you need to do, in a nutshell:
>
> Any place that call_method<...>(...) can be invoked on a
> thread that isn't the thread running the Python interpreter,
> you need to surround it with macro invocations which acquire
> the Global Interpreter Lock (GIL) and establishes the thread
> state (and then subsequently release it):
>
> http://www.python.org/dev/doc/devel/api/threads.html#l2h-751
> has a description.
>
> It looks as though you'll need to save away a copy of the
> thread state in your module initialization function or
> something to accomplish the above.
>
> Any place that you a wrapping a function which might invoke
> such a surrounded call_method<...> invocation, you must release
> the GIL and then subsequently acquire it. You can do this by
> wrapping a "thin wrapper" function which just adds the
> neccessary GIL management.
>
> Adding the ability to do this stuff automatically (so you don't
> have to do as much of it by hand) globally for an extension module
> or on a function-by-function basis is something I've been meaning
> to get to for a while. If you figure out the formula, we'll have a
> head start at integrating the functionality into Boost.Python.
>
> HTH,
--
Patrick L. Hartling | Research Assistant, VRAC
patrick at vrac.iastate.edu | 2624 Howe Hall: 1.515.294.4916
http://www.137.org/patrick/ | http://www.vrac.iastate.edu/
More information about the Cplusplus-sig
mailing list