Victor Lin wrote: > 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?
You can't call Python code from an arbitrary thread. Before you are allowed to call a Python function from a thread, you must enable Python's threading subsystem and register the thread. Python need to store information (like the exception information) in a thread local variable (TLS). I can't tell you how to register your thread with Python, though. Christian -- http://mail.python.org/mailman/listinfo/python-list