Message60453
We have a Python HTTP server that, in the parent
process, uses os.fork to spawn new children, but at the
same time the parent could be spawning new threads (in
threads other than the main thread -- only the main
thread does forking).
Anwyay, it very rarely causes deadlock in a spawned
child when that child tries to start a new thread.
I believe I've tracked this down to the
_active_limbo_lock in the threading module.
Specifically, if this lock is held by parent (because
another thread is spawning a thread), just as os.fork
happens, the child inherits the held lock and will then
block trying to do any threading.* operations.
Just like the global interp. lock is overwritten in the
child after fork, I think something similar should
happen to threading._active_limbo_lock? (And more
generally the user needs to be aware of locks passing
through fork; but I think at least threading.py should
"do the right thing").
This thread looks quite relevant:
groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&threadm=38E6F2BA.E66CAC90%40ensim.com&rnum=5&prev=/groups%3Fq%3Dpython%2Bfork%2Bthreading%2Bmodule%2B%2Block%26hl%3Den%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26sa%3DN%26scoring%3Dd
|
|
Date |
User |
Action |
Args |
2008-01-20 09:56:41 | admin | link | issue874900 messages |
2008-01-20 09:56:41 | admin | create | |
|