multiprocessing.Pool generando un nuevo childern después de terminate () en Linux / Python2.7?

Tengo un archivo ejecutable que necesito ejecutar muy a menudo, con diferentes parámetros. Para esto escribí una pequeña envoltura de Python (2.7), usando el módulo de multiprocesamiento, siguiendo el patrón dadoaquí.

Mi código se ve así:

try:
     logging.info("starting pool runs")
     pool.map(run_nlin, params)
     pool.close()
 except KeyboardInterrupt:
     logging.info("^C pressed")
     pool.terminate()
 except Exception, e:
     logging.info("exception caught: ", e)
     pool.terminate()
 finally:
     time.sleep(5)
     pool.join()
     logging.info("done")

Mi función de trabajador está aquí:

class KeyboardInterruptError(Exception): pass

def run_nlin((path_config, path_log, path_nlin, update_method)):
    try:
        with open(path_log, "w") as log_:
            cmdline = [path_nlin, path_config]
            if update_method:
                cmdline += [update_method, ]
            sp.call(cmdline, stdout=log_, stderr=log_)
    except KeyboardInterrupt:
        time.sleep(5)
        raise KeyboardInterruptError()
    except:
        raise

path_config es la ruta a un archivo de configuración para el programa binario; allí hay por ejemplo La fecha para ejecutar el programa para.

Cuando empiezo la envoltura, todo se ve bien. Sin embargo, cuando presiono^C, el script wrapper parece lanzar un adicionalnumproc Procesos de la piscina antes de terminar. Como ejemplo, cuando comienzo el script para los días 1-10, puedo ver en elps aux salida que se ejecutan dos instancias del programa binario (generalmente para los días 1 y 3). Ahora, cuando presiono^C, el script contenedor se cierra, los programas binarios para los días 1 y 3 se han ido, pero hay nuevos programas binarios que se ejecutan para los días 5 y 7.

Así que a mi me parece como si elPool lanza otronumproc Procesos antes de finalmente morir.

¿Alguna idea de lo que está pasando aquí, y qué puedo hacer al respecto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta