--- pool.py.original 2013-11-20 12:22:22.000000000 -0500 +++ pool.py 2013-11-20 19:50:13.000000000 -0500 @@ -210,17 +210,31 @@ """Bring the number of pool processes up to the specified number, for use after reaping workers which have exited. """ - for i in range(self._processes - len(self._pool)): - w = self.Process(target=worker, - args=(self._inqueue, self._outqueue, - self._initializer, - self._initargs, self._maxtasksperchild) - ) - self._pool.append(w) - w.name = w.name.replace('Process', 'PoolWorker') - w.daemon = True - w.start() - debug('added worker') + + try: + for i in range(self._processes - len(self._pool)): + w = self.Process(target=worker, + args=(self._inqueue, self._outqueue, + self._initializer, + self._initargs, self._maxtasksperchild) + ) + self._pool.append(w) + w.name = w.name.replace('Process', 'PoolWorker') + w.daemon = True + w.start() + debug('added worker') + except: + debug("Process creation error. Cleaning-up (%d) workers." % (len(self._pool))) + + for process in self._pool: + if process.is_alive() is False: + continue + + process.terminate() + process.join() + + debug("Processing cleaning-up. Bubbling error.") + raise def _maintain_pool(self): """Clean up any exited workers and start replacements for them.