Threading a lengthy C function
theller at python.net
Thu Nov 20 20:02:44 CET 2003
>>If the original posters intent is simply to call functions in a dll, he
>>should probably try out ctypes - ctypes handles the GIL automatically
>>(release before calling the function, acquire it back after return of
>>the function, and even grabbing the GIL if a callback into Python is
>>done). And it avoids SWIG completely.
> I'm not sure I understand how the last part is done unless all callback
> functions are known to ctypes and even then I'm not sure how ctypes
> would know how to associate a particular call back event with the owner
> thread. Are ctypes callbacks somehow defined uniquely for each callout?
No. In Python 2.2, ctypes creates a new threadtstate for each callback
into Python. In 2.3, the mechanism from PEP 311 is used, which
magically gets the threadstate.
> The other thing I never quite get is what part of the C api I'm allowed
> to use without having the GIL I think it safest to assume I may not call
> any python api without having it.
*Very* few functions, it's mentioned in the docs.
> Wrapping completely independent DLLs seems reasonable, but how does
> ctypes know that a particular extension/dll actually assumes that it has
> the GIL at entry which is mostly what extensions need.
ctypes isn't (or shouldn't be) used to call Python C api functions, only
independent DLLs. (Hm, didn't I post sick examples calling Python's C
api in the past myself <wink>).
More information about the Python-list