Estoy tratando de ejecutar tres funciones (cada una puede tomar hasta 1 segundo para ejecutar) cada segundo. Luego me gustaría almacenar el resultado de cada función y escribirlas en archivos separados.Ejecutar múltiples funciones cada segundo, escribir el resultado en el archivo
Por el momento estoy usando Timer
s para mi manejo de retraso. (Podría subclase Thread
, pero eso es conseguir un poco complicado para este sencillo script)
def main:
for i in range(3):
set_up_function(i)
t = Timer(1, run_function, [i])
t.start()
time.sleep(100) # Without this, main thread exits
def run_function(i):
t = Timer(1, run_function, [i])
t.start()
print function_with_delay(i)
¿Cuál es la mejor manera de manejar la salida de function_with_delay? ¿Agregar el resultado a una lista global para cada función?
Entonces podría poner algo como esto al final de mi función principal:
...
while True:
time.sleep(30) # or in a try/except with a loop of 1 second sleeps so I can interrupt
for i in range(3):
save_to_disk(data[i])
Pensamientos?
Editar: Añadido mi propia respuesta como una posibilidad
+1 Esto funciona porque la salida es para separar archivos. Si no era trivial e involucraba una combinación de resultados, entonces tendría que esperar a que todos los artículos en cola terminen antes de escribir. Asegúrate de llamar 'task_done' en los elementos que obtienes también. – darvids0n
¡Gran idea! Queue es seguro para subprocesos y es mucho mejor que list.append (data) –
Agregué la llamada a 'task_done' como lo sugirió darvids0n. Gracias. – srgerg