El grupo de multiprocesamiento de Python se bloquea al unir?

Estoy tratando de ejecutar algún código de Python en varios archivos en paralelo. El constructo es básicamente:

def process_file(filename, foo, bar, baz=biz):
    # do stuff that may fail and cause exception

if __name__ == '__main__':
    # setup code setting parameters foo, bar, and biz

    psize = multiprocessing.cpu_count()*2
    pool = multiprocessing.Pool(processes=psize)

    map(lambda x: pool.apply_async(process_file, (x, foo, bar), dict(baz=biz)), sys.argv[1:])
    pool.close()
    pool.join()

Anteriormente usé pool.map para hacer algo similar y funcionó muy bien, pero parece que no puedo usar eso aquí porque pool.map no (me parece) me permite pasar argumentos adicionales (y usar lambda para no funcionará porque lambda no puede ser ordenada).

Así que ahora estoy tratando de hacer que las cosas funcionen utilizando apply_async () directamente. Mi problema es que el código parece colgar y nunca salir. Algunos de los archivos fallan con una excepción, pero no veo por qué ¿qué causaría que unir falla / cuelgue? Curiosamente, si ninguno de los archivos falla con una excepción, sale de forma limpia.

¿Qué me estoy perdiendo?

Editar: cuando la función (y por lo tanto un trabajador) falla, veo esta excepción:

Exception in thread Thread-3:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 552, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 505, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/lib/python2.7/multiprocessing/pool.py", line 376, in _handle_results
    task = get()
TypeError: ('__init__() takes at least 3 arguments (1 given)', <class 'subprocess.CalledProcessError'>, ())

Si veo incluso uno de estos, el proceso principal del proceso se cuelga para siempre, nunca cosechando a los niños y saliendo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta