ejecutar y finalizar mediante progtwigción un proceso por lotes de larga ejecución en Python

He estado buscando una manera de iniciar y terminar un “trabajo por lotes” de larga duración en python. En este momento estoy usando “os.system ()” para iniciar un trabajo por lotes de larga ejecución dentro de cada proceso secundario. Como habrás adivinado, “os.system ()” genera un nuevo proceso dentro de ese proceso hijo (¿proceso de nietos?), Por lo que no puedo eliminar el trabajo por lotes del proceso abuelo. Para proporcionar una visualización de lo que acabo de describir:

Main (grandparent) process, with PID = AAAA | |------> child process with PID = BBBB | |------> os.system("some long-running batch file) [grandchild process, with PID = CCCC] 

Entonces, mi problema es que no puedo matar el proceso de los nietos del abuelo …

Mi pregunta es, ¿existe una manera de iniciar un trabajo por lotes de larga duración dentro de un proceso secundario y poder cancelar ese trabajo por lotes simplemente terminando el proceso secundario? ¿Cuáles son las alternativas a os.system () que puedo usar para poder eliminar el trabajo por lotes del proceso principal?

Gracias !!

El módulo de subproceso es la forma correcta de generar y controlar los procesos en Python.

de los documentos:

El módulo de subproceso le permite generar nuevos procesos, conectarse a sus canales de entrada / salida / error y obtener sus códigos de retorno. Este módulo pretende reemplazar varios módulos y funciones más antiguos , como:

os.system
os.spawn
os.popen
popen2
comandos

así que … si está en Python 2.4+, el subprocess es el reemplazo de os.system

para detener procesos, revise los métodos terminate() y communicate() de los objetos Popen .

Si se encuentra en un sistema compatible con Posix (por ejemplo, Linux o OS X) y no se debe ejecutar ningún código Python después del proceso secundario, use os.execv . En general, evite os.system y use el módulo de subprocess lugar.

Si desea controlar el inicio y la detención de procesos secundarios, debe utilizar subprocesos. En ese caso, no busque más que el módulo de threading de Python.