parameters: (self)
docstring: Internal routine to wait for children that have exited.
docstring_summary: Internal routine to wait for children that have exited.
docstring_tokens: Internal routine to wait for children that have exited .
function: def collect_children(self):
          """Internal routine to wait for children that have exited."""
          if self.active_children is None: return
          while len(self.active_children) >= self.max_children:
              # XXX: This will wait for any child process, not just ones
              # spawned by this library. This could confuse other
              # libraries that expect to be able to wait for their own
              # children.
              try:
                  pid, status = os.waitpid(0, 0)
              except os.error:
                  pid = None
              if pid not in self.active_children: continue
              self.active_children.remove(pid)
  
          # XXX: This loop runs more system calls than it ought
          # to. There should be a way to put the active_children into a
          # process group and then use os.waitpid(-pgid) to wait for any
          # of that set, but I couldn't find a way to allocate pgids
          # that couldn't collide.
          for child in self.active_children:
              try:
                  pid, status = os.waitpid(child, os.WNOHANG)
              except os.error:
                  pid = None
              if not pid: continue
              try:
                  self.active_children.remove(pid)
              except ValueError, e:
                  raise ValueError('%s. x=%d and list=%r' % (e.message, pid,
                                                             self.active_children))
function_tokens: def collect_children ( self ) : if self . active_children is None : return while len ( self . active_children ) >= self . max_children : # XXX: This will wait for any child process, not just ones # spawned by this library. This could confuse other # libraries that expect to be able to wait for their own # children. try : pid , status = os . waitpid ( 0 , 0 ) except os . error : pid = None if pid not in self . active_children : continue self . active_children . remove ( pid ) # XXX: This loop runs more system calls than it ought # to. There should be a way to put the active_children into a # process group and then use os.waitpid(-pgid) to wait for any # of that set, but I couldn't find a way to allocate pgids # that couldn't collide. for child in self . active_children : try : pid , status = os . waitpid ( child , os . WNOHANG ) except os . error : pid = None if not pid : continue try : self . active_children . remove ( pid ) except ValueError , e : raise ValueError ( '%s. x=%d and list=%r' % ( e . message , pid , self . active_children ) )