Est-il un moyen facile d'utiliser un tempfile python dans une étagère (et assurez-vous qu'il se nettoie)?

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

  •  18-09-2019
  •  | 
  •  

Question

En fait, je veux une taille infinie (avec plus de précision, disque dur plutôt que de la mémoire liée) dict dans un programme python j'écris. Il semble que le tempfile et les modules shelve sont naturellement adaptés pour cela, cependant, je ne vois pas comment les utiliser ensemble de manière sûre. Je veux que le tempfile à supprimer lorsque l'étagère est GCed (ou à la suppression de la garantie après la shelve est hors d'usage, peu importe le moment), mais la seule solution que je peux trouver pour cela implique l'utilisation tempfile.TemporaryFile () pour ouvrir une poignée de fichiers, obtenir le nom du fichier de la poignée, en utilisant ce nom de fichier pour ouvrir une étagère, en gardant la référence à la poignée de fichier pour l'empêcher d'obtenir GCed (et le fichier supprimé), puis mettre un emballage sur l'étagère qui stocke cette référence. Quelqu'un at-il une meilleure solution que ce gâchis alambiquée?

Restrictions:. Ne peut utiliser la bibliothèque Python standard et doit être plate-forme entièrement croix

Était-ce utile?

La solution

Je préférerais hériter de shelve.Shelf, et remplacer la méthode close (*) pour les fichiers délier. Notez que, en fonction du module DBM spécifique utilisé, vous pouvez avoir plus d'un fichier qui contient l'étagère. Une solution pourrait consister à créer un répertoire temporaire, plutôt que d'un fichier temporaire, et retirez tout dans le répertoire lorsque vous avez terminé. L'autre solution serait de se lier à un module DBM spécifique (par exemple, bsddb ou dumbdbm), et éliminer spécifiquement les fichiers que ces bibliothèques créent.

(*) Notez que la méthode à proximité d'une étagère est aussi appelée lorsque la tablette est détruite. Le seul cas comment vous pourriez finir avec les fichiers d'ordures est quand l'interprète tombe en panne ou est tué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top