2015-04-25 20 views
7

Nel nostro laboratorio memorizziamo i nostri dati nei file hdf5 tramite il pacchetto python h5py.Chiudere un file di dati h5py aperto

All'inizio di un esperimento creiamo un file hdf5 e memorizziamo un array dopo l'array di array di dati nel file (tra le altre cose). Quando un esperimento fallisce o viene interrotto, il file non viene chiuso correttamente. Poiché i nostri esperimenti vengono eseguiti da iPython, il riferimento all'oggetto dati rimane (da qualche parte) nella memoria.

C'è un modo per cercare tutti gli oggetti dati aperti di h5py e chiuderli?

risposta

10

Ecco come potrebbe essere fatto (io non riuscivo a capire come controllare per chiuso-ness del file senza eccezioni, forse troverete):

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 

Un'altra idea:

Damping come si utilizzano i file, per quanto riguarda l'utilizzo del gestore di contesto e la parola chiave with come questo?

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

Quando il flusso del programma esce dal con-block, il file viene chiuso a prescindere da ciò che accade, incluse le eccezioni ecc

+0

Grazie per le informazioni sul "Un'altra idea". Stavo solo cercando di assicurarmi che i miei h5py.Files si chiudessero con il "con" – zerocog

Problemi correlati