Callback from c thread with ctypes

Victor Lin Bornstub at gmail.com
Sun Mar 8 10:24:36 EDT 2009


On 3月8日, 下午9時56分, "Diez B. Roggisch" <de... at nospam.web.de> wrote:
> Victor Lin schrieb:
>
>
>
> > Hi,
>
> > I am going to develop a c library binding with ctypes. That c library
> > will call callback from worker threads it created. Here comes the
> > problem : Will the GIL be acquired before it goes into Python
> > function?
>
> > I got a little try..
>
> > DSPPROC = WINFUNCTYPE(None, DWORD, DWORD, c_void_p, DWORD, c_void_p)
>
> > def test(handle, channel, buffer, length, user):
> >     print handle, channel, buffer, length, user
>
> > dsp = BASS_ChannelSetDSP(stream, DSPPROC(test), None, 123)
>
> > I got "access violation" when I run it... It seems that the ctypes
> > did't acquire GIL before it call the python callback. As the document
> > says.
>
> > WINFUNCTYPE will release GIL during the call
>
> > But it does not mention callback about Python function? How about a
> > call from another thread? Could somebody help me?
>
> The releasing takes only place when entering a c-function. A
> python-callback acquires the GIL, see callbacks.c in the python source.
>
> The access violation has nothing to do with that I presume, that's just
> a general programming error as it happens with ctypes during development.
>
> Diez

Hi,

Thanks your replying, I try it again, found that my program only crash
when I call it from python's IDLE. If I click it, namely execute it
with python directly, it works fine. Why the program will crash within
IDLE?



More information about the Python-list mailing list