Charles-François Natali <neolo...@free.fr> added the comment: In the common case, I don't think that the os.waitpid(0, 0) is the hot spot, but rather this:
for child in self.active_children: os.waitpid(child, os.WNOHANG) It's called every time, and it's O(number of active children). os.waitpid(0, 0) is only called when max_children (40) is reached. Also, I'm not sure why it's called without WNOHANG, because that means that we will block until active_children falls below max_children. That's an arbitrary limit, especially since it's not documented. I've written a first draft patch using process group, that removes active_children and max_children. The only slightly tricky part is the call to setpgid from the child and from the parent, to avoid a race where the child could try to join a stale PGID. Note that I assume that setpgid is available on every Unix, since according to http://pubs.opengroup.org/onlinepubs/007908799/xsh/setpgid.html , it's "Derived from the POSIX.1-1988 standard". Also, according to buildbots' configure logs, it's available everywhere. ---------- keywords: +patch Added file: http://bugs.python.org/file22124/ss_wait_group.diff _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue12184> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com