Forking and Threads
Tim Peters
tim.one at home.com
Thu Feb 8 23:17:43 EST 2001
[posted & mailed]
[Paul Robinson]
> ...
> http://cobweb.quantisci.co.uk/pub/english.cgi/d10030658/forkingtest2.py
> ) will run happily for several minutes (upto about 10mins so far) and
> then just sit there with the main process running with as much CPU time
> as the OS will give it!
>
> ...
>
> I've only tested this on:
> Python 1.5.2
> Red Hat Linux release 6.2 (Zoot)
> Kernel 2.2.14-5.0smp on a 2-processor i686
>
> and would very interested in how (and if) it performs on other operating
> systems - obviously only those with both threading and forking need
> apply.
Try it under Python 2.0. Similar problems were reported earlier, but only
(IIRC) under Linux. A patch went into 2.0 that at least allowed Python's
own Lib/test/test_fork1.py to complete normally. However, the behavior was
never fully understood; the best guess we were left with is that, across a
fork, the Linux flavor of mutexes and/or condition variables were mistakenly
still sharing some little of piece of internal state (Python's own basic
flavor of lock is implemented under pthreads via a mutex + condvar combo,
and after a fork the observed behavior of Python's internal "global
interpreter lock" didn't make any sense). 2.0 "fixed" that via brute force
panic: after a fork, the child allocates a brand new interpreter lock for
its own use; it leaks the one inherited from the parent process. Nobody was
able to do substantially better than this despite countless hours of trying,
so, under the assumption that it was a Linux bug that would eventually get
fixed, we all forgot about it.
blissfully-too<wink>-ly y'rs - tim
More information about the Python-list
mailing list