Pregunta

Tengo un archivo abierto para escritura y un proceso que se ejecuta durante días; algo se escribe en el archivo en momentos relativamente aleatorios. Según tengo entendido, hasta que haga file.close (), existe la posibilidad de que realmente no se guarde en el disco. ¿Es eso cierto?

¿Qué sucede si el sistema falla cuando el proceso principal aún no ha finalizado? ¿Hay una manera de hacer un tipo de compromiso una vez cada ... digamos, 10 minutos (y yo lo llamo yo mismo, no es necesario ejecutar el temporizador)? ¿File.close () y open (archivo, 'a') es la única forma, o existen mejores alternativas?

¿Fue útil?

Solución

Debería poder usar file.flush () para hacer esto.

Otros consejos

Si no desea finalizar el proceso actual para agregar f.flush () (¿parece que ya se está ejecutando durante días?), debería estar bien. Si ve que el archivo en el que está escribiendo se hace más grande, no perderá esa información ...

De los documentos de Python:

  

write (str)       Escribe una cadena en el archivo. No hay valor de retorno. Debido al buffering,   la cadena puede no aparecer en realidad   el archivo hasta que la descarga () o cierre ()   se llama metodo.

Parece que el sistema de almacenamiento en búfer de Python vaciará automáticamente los objetos del archivo, pero no está garantizado cuando eso suceda.

Para asegurarse de que sus datos se escriben en el disco, use file.flush () seguido de os.fsync (file.fileno ()) .

Como ya se ha dicho, use el método .flush () para forzar la escritura del búfer, pero evite usar muchas llamadas para vaciar, ya que esto puede ralentizar su escritura (si la aplicación se basa en escrituras rápidas) ya que estará forzando a su sistema de archivos a escribir cambios que sean más pequeños que su tamaño de búfer, lo que lo pondrá de rodillas. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top