Estoy ejecutando un script de Perl a través del módulo de subproceso en Python en Linux. La función que ejecuta el script se llama varias veces con entrada variable.¿Por qué tengo que usar .wait() con el módulo de subproceso de python?
def script_runner(variable_input):
out_file = open('out_' + variable_input, 'wt')
error_file = open('error_' + variable_input, 'wt')
process = subprocess.Popen(['perl', 'script', 'options'], shell=False,
stdout=out_file, stderr=error_file)
Sin embargo, si ejecuto esta función, por ejemplo, dos veces, la ejecución del primer proceso se detendrá cuando comience el segundo proceso. Puedo obtener mi comportamiento deseado agregando
process.wait()
después de llamar al script, así que no estoy realmente atascado. Sin embargo, quiero averiguar por qué no puedo ejecutar el script usando el subproceso tantas veces como quiera, y hacer que el script haga estos cálculos en paralelo, sin tener que esperar a que termine entre cada ejecución.
ACTUALIZACIÓN
El culpable no era tan emocionante: el guión de Perl se utiliza un archivo común que fue reescrito para cada ejecución.
Sin embargo, la lección que aprendí de esto fue que el recolector de basura no elimina el proceso una vez que se inicia, porque esto no influyó en mi script una vez que lo resolvió.
¿está seguro de que el segundo se completa? ¿Te refieres a la invocación * same * dos veces (la misma 'variable_input')? – knitti
El segundo se completa como se esperaba. Quiero decir con diferentes 'variable_input'. Por ejemplo, 'test_1' y 'test_2'. – Viktiglemma
¿Qué hay sobre tratar de mantener una referencia a ambos procesos, p. devolviendo el proceso y almacenándolo en una variable? – knitti