¿Hay una manera fácil de utilizar un archivo temporal pitón en una estantería (y asegurarse de que se limpia a sí misma)?

StackOverflow https://stackoverflow.com/questions/1298037

  •  18-09-2019
  •  | 
  •  

Pregunta

Básicamente, quiero una (más exactamente, unidad de disco duro en lugar de obligado memoria) dict en un programa de Python que estoy escribiendo tamaño infinito. Parece que el archivo temporal y dejar de lado los módulos tienen una vocación natural para esto, sin embargo, no puedo ver cómo usarlos juntos de una manera segura. Quiero que el archivo temporal que se elimina cuando el dejar de lado es GCed (o al borrado de garantía después de la estantería está fuera de uso, independientemente del momento), pero la única solución que puede llegar a este implica el uso de tempfile.TemporaryFile () para abrir un identificador de archivo, recibiendo el nombre de archivo del mango, el uso de este nombre de archivo para la apertura de una estantería, manteniendo la referencia al identificador de archivo para evitar que se haga GCed (y el archivo borrado), y luego poner un envoltorio en la estantería que almacena esta referencia. Alguien tiene una solución mejor que este lío complicado?

Restricciones:. Sólo puede utilizar la biblioteca de Python estándar y deben ser plenamente plataforma cruzada

¿Fue útil?

Solución

Yo prefiero heredar de shelve.Shelf, y anular el método close (*) para desvincular los archivos. Tenga en cuenta que, dependiendo del módulo dBm concreto que se utilice, es posible que tenga más de un archivo que contiene la plataforma. Una solución podría ser la creación de un directorio temporal, en lugar de un archivo temporal, y eliminar cualquier cosa en el directorio cuando haya terminado. La otra solución sería la de obligar a un módulo dBm específica (por ejemplo, bsddb o dumbdbm), y quitar específicamente aquellos archivos que crean estas bibliotecas.

(*) Tenga en cuenta que el método de cierre de un estante también se llama cuando el estante es basura recogida. El único caso cómo podría terminar con archivos de la basura es cuando el intérprete se cae o se muere.

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