multiprocessing signal defect
Adam Tauno Williams
awilliam at whitemice.org
Fri Oct 29 08:22:19 EDT 2010
On Fri, 2010-10-29 at 08:12 -0400, Neal Becker wrote:
> Seems multiprocessing doesn't behave well with signals:
> ---------
> from multiprocessing import Pool
> import time
> def sleep (dummy):
> time.sleep (10)
> if __name__ == '__main__':
> pool = Pool (processes=2)
> result = pool.map (sleep, range (4))
> -------------
> start it up
> $ python test_multip.py
> ----------------------
> ps auxf | grep python
> nbecker 6605 1.6 0.1 338192 6952 pts/1 Sl+ 08:03 0:00 | \_
> python test_multip.py
> nbecker 6606 0.0 0.1 186368 4760 pts/1 S+ 08:03 0:00 |
> \_ python test_multip.py
> nbecker 6607 0.0 0.1 186372 4740 pts/1 S+ 08:03 0:00 |
> \_ python test_multip.py
> kill 6607
> ps auxf | grep python
> nbecker 6605 0.5 0.1 338192 6952 pts/1 Sl+ 08:03 0:00 | \_
> python test_multip.py
> nbecker 6606 0.0 0.1 186368 4760 pts/1 S+ 08:03 0:00 |
> \_ python test_multip.py
> nbecker 6607 0.0 0.0 0 0 pts/1 Z+ 08:03 0:00 |
> \_ [python] <defunct>
> kill 6606
> ps auxf | grep python
> nbecker 6605 0.3 0.1 338192 6952 pts/1 Sl+ 08:03 0:00 | \_
> python test_multip.py
> nbecker 6606 0.0 0.0 0 0 pts/1 Z+ 08:03 0:00 |
> \_ [python] <defunct>
> nbecker 6607 0.0 0.0 0 0 pts/1 Z+ 08:03 0:00 |
> \_ [python] <defunct>
> Now we have 2 dead children and the parent is hung forever.
> Isn't this a serious defect?
No, I think this is just POSIX/UNIX process behavior. If the parent
never joins on the child the child can never exit [which is what a
Zombie process is].
For example, see the do_verify_workers method in
<http://coils.hg.sourceforge.net/hgweb/coils/coils/file/6ab5ade3e488/src/coils/logic/workflow/services/executor.py>
A parent process needs to make some effort to reap its children.
More information about the Python-list
mailing list