[C++-sig] Re: boost::python and threads
Vladimir Vukicevic
vladimir at pobox.com
Sun Jul 6 00:26:04 CEST 2003
Nikolay Mladenov wrote:
>>However, an alternative solution that I was thinknig of is to bake the
>>thread smarts directly into boost::python. It seems to me that
>>call_method and similar should always be wrapped with a
>>PyGILState_Ensure/PyGILState_Release.
>>
>>
>
>I guess you can do that without a problem?
>
Yeah, though I'm having a slight issue with call_method invocations
where the return-type is void, since I need to split up the conversion
and the actual "return r;" call.
>>Also, an additional call policy
>>could be added, something like "allow_threads", which would cause b::p
>>to call Py_BEGIN_ALLOW_THREADS and Py_END_ALLOW_THREADS around the
>>function invocation on C++. This seems like a much more generally
>>useful solution than me trying to do the dance in wrapper classes.
>>
>>Is this the right way to go? If so, I'd appreciate any pointers on
>>implementing a new call policy, especially if it's possible to both
>>specify allow_threads and a return_value_policy.
>>
>>
>
>Look here: http://boost.org/libs/python/doc/v2/CallPolicies.html
>It should be very easy for you to write a call policy.
>And than you can just use it like that
>
>return_value_policy<copy_const_reference, your_new_threading_policy>()
>
Whoops, I completely missed the overview concept page.. thank you, looks
straightforward enough. However, in looking at the code more, I don't
think that a call policy would do it -- since no Py_* API functions can
be called betwen BEGIN/END macros, they need to go around the final call
into C++, thus need to be inserted directly into invoke.hpp. The
changes aren't much, but I'm getting a crash-course in boost::python
innards :)
Thanks,
- Vlad
More information about the Cplusplus-sig
mailing list