2015-04-25 17 views
7

W naszym laboratorium przechowujemy nasze dane w plikach hdf5 przez pakiet Pythona h5py.Zamknij otwarty plik danych h5py

Na początku eksperymentu tworzymy plik hdf5 i przechowujemy tablicę po tablicy tablic danych w pliku (między innymi). Kiedy eksperyment się nie powiedzie lub zostanie przerwany, plik nie zostanie poprawnie zamknięty. Ponieważ nasze eksperymenty trwają od iPython odniesienie do obiektu danych pozostaje (gdzieś) w pamięci.

Czy istnieje sposób skanowania wszystkich otwartych obiektów danych h5py i ich zamknięcia?

Odpowiedz

10

ten sposób można to zrobić (nie mogłem dowiedzieć się, jak sprawdzić zamkniętym Ness pliku bez wyjątków, może znajdziesz):

import gc 
for obj in gc.get_objects(): # Browse through ALL objects 
    if isinstance(obj, h5py.File): # Just HDF5 files 
     try: 
      obj.close() 
     except: 
      pass # Was already closed 

inny pomysł:

Dpending jak używać plików, co z użyciem menedżera kontekstu i słowa kluczowego with?

with h5py.File("some_path.h5") as f: 
    f["data1"] = some_data 

Kiedy przepływ Program zamyka się blok, plik zostanie zamknięty niezależnie od tego, co się dzieje, w tym wyjątków itp

+0

Dzięki za info o „Innym pomysłem”. Po prostu szukałem, aby moje pliki h5py.finały były zamykane "z" – zerocog

Powiązane problemy