Python C/API based multithread python program locks
Anders J. Munch
ajm at flonidan.dk
Wed Sep 29 08:19:55 EDT 2004
"kanji" <kanji_rama at yahoo.com> wrote:
>
> The issue is it works most of the time, but occassionally (I mean this
> is quite random ) it hangs and it does not generate any errors as
> such. While trying to debug, sometimes even the gdb hangs, but i
> managed to get a backtrace of a hung thread:
>
> #0 0xb75ebc32 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
> #1 0xb75d11ee in pthread_cond_wait@@GLIBC_2.3.2 ()
> from/lib/tls/libpthread.so.0
> #2 0x0809bb3f in PyThread_acquire_lock ()
> #3 0x0809e45c in _PyObject_GC_Del ()
My guess is that the problem is not in this thread: Some other thread is
hung or crashed, while holding the GIL, and this thread here is just waiting
on the GIL.
> So just to weed out the possibility that it is not because of some
> error in the code, I iteratively called the same function (which
> creates say 100 threads) in a for loop - for 500 times. I found that
> it tends to hang at different iterations -- say may be at iteration
> #480 or #12 or sometimes it sails smoothly.
You have a race condition. There may be some shared resource that is not
accessed in a thread-safe manner. Perhaps some C global variable used by
your code or a library that your code calls?
Or perhaps you just have a blocking I/O-call waiting for something that
never happens.
Good luck - you're gonna need it :/
- Anders
More information about the Python-list
mailing list