Python Threads and C Semaphores

Andrew MacIntyre andymac at bullseye.apana.org.au
Tue Jan 16 17:15:38 EST 2007


Dejan Rodiger wrote:
> Jeremy said the following on 16.1.2007 8:27:
>
>> I have a fat C++ extension to a Python 2.3.4 program. In all, I count
>> five threads. Of these, two are started in Python using
>> thread.start_new_thread(), and both of these wait on semaphores in the C++
>> extension using sem_wait(). There also are two other Python threads and one 
>> thread running wholly in
>> the extension.
>>
>> I notice that when one of the Python threads calls the extension and waits
>> on a semaphore, all but the C++ thread halt even when not waiting on any
>> semaphore. How do we get this working right?
> 
> Check the Global Interpreter Lock

More specifically, make sure that any extension code that does not
call Python API functions releases the GIL for the duration.

Look into the Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS macros and the
PyGILState*() API functions (these API functions appeared in Python 2.3).

-- 
-------------------------------------------------------------------------
Andrew I MacIntyre                     "These thoughts are mine alone..."
E-mail: andymac at bullseye.apana.org.au  (pref) | Snail: PO Box 370
        andymac at pcug.org.au             (alt) |        Belconnen ACT 2616
Web:    http://www.andymac.org/               |        Australia



More information about the Python-list mailing list