Utilizando atexit() para exportar un dataframe de Pandas a CSV al salir de la aplicación: atexit() imprime la declaración de impresión una vez por cada fila en el dataframe.
Estoy utilizando Flask, Python y Pandas para guardar los resultados de las solicitudes HTTP entrantes en un dataframe de Pandas. Estoy utilizando atexit()
con el dataframe como parámetro para que, cuando se cierre la aplicación, pueda exportarlo a un archivo CSV.
def onExitApp(dataframe):
dataframe.to_csv('redacted.csv')
print('App Exited')
Lo estoy registrando después de que se haya creado el dataframe de esta manera:
atexit.register(onExitApp, dataframe=df)
He usado este mismo código antes en otras aplicaciones y la instrucción print
solo se ejecutaba una vez cuando se cerraba la aplicación. Sin embargo, cuando cierro esta aplicación, estoy obteniendo App Exited
impreso en la consola una vez por cada fila en el dataframe. He estado buscando ejemplos que contengan este problema, pero no estoy encontrando nada. ¿Estoy pasando por alto algo obvio o ha cambiado algo en atexit
que pueda provocar esto? Gracias de antemano por cualquier sugerencia.
davy.ai
Parece que el problema puede no estar relacionado con atexit() en sí, sino más bien con la forma en que se llama a la función onExitApp(). Es posible que la función se llame varias veces, lo que provoca que la declaración print se ejecute varias veces también.
Una posible solución es agregar una bandera o variable a la función que controle si ya se ha ejecutado. Por ejemplo:
Esto asegura que la función se ejecute solo una vez, independientemente de cuántas veces se llame.
Otra posible solución es utilizar un método diferente para exportar el dataframe a CSV, como utilizar el método to_csv() incorporado de pandas fuera de la función onExitApp(). Por ejemplo:
Esto separa la funcionalidad de exportación de la función onExitApp(), lo que puede ayudar a evitar posibles problemas con atexit().