code: def subproc_map(self, f, items):
      
      try:
        # Pool.map (and async_map().get() w/o timeout) can miss SIGINT.
        # See: http://stackoverflow.com/a/1408476, http://bugs.python.org/issue8844
        # Instead, we map_async(...), wait *with a timeout* until ready, then .get()
        # NB: in 2.x, wait() with timeout wakes up often to check, burning CPU. Oh well.
        res = SubprocPool.foreground().map_async(f, items)
        while not res.ready():
          res.wait(60)  # Repeatedly wait for up to a minute.
          if not res.ready():
            self.log.debug('subproc_map result still not ready...')
        return res.get()
      except KeyboardInterrupt:
        SubprocPool.shutdown(True)
        raise
docs: Map function `f` over `items` in subprocesses and return the result.
  
        :API: public
  
        :param f: A multiproc-friendly (importable) work function.
        :param items: A iterable of pickleable arguments to f.