El paso a paso o código que verás en este post es la resolución más fácil y válida que hallamos a tus dudas o problema.
Solución:
Es mejor usar un with
declaración en su lugar, que cierra el archivo cuando finaliza la declaración, incluso si se produce una excepción:
with open("filename.pkl", "wb") as f:
pickle.dump(dictname, f)
...
with open("filename.pkl", "rb") as f:
dictname = pickle.load(f)
De lo contrario, el archivo solo se cerrará cuando se ejecute el recolector de basura, y cuando eso suceda es indeterminado y casi imposible de predecir.
Utilizando el with
declaración es el mejor enfoque, pero solo para ser contrario, si no usó with
debe conservar un identificador de archivo… y cerrar desde allí.
f = open('filename.pkl', 'wb')
pickle.dump(dictname, f)
f.close()
y en el otro script:
f = open('filename.pkl','rb')
dictname = pickle.load(f)
f.close()
Esto es esencialmente lo que with
está haciendo por ti.
Sin embargo… si se quedó atascado (por cualquier motivo), con el código que publicó originalmente, y para responder a su pregunta original… sí, el recolector de basura lo cerrará en un momento no especificado en el futuro. O posiblemente podría rastrear una referencia al objeto de archivo usando el gc
módulo y luego ciérrelo. Existen algunos códigos que pueden ayudarlo a hacer esto, por ejemplo: https://github.com/uqfoundation/dill/blob/master/dill/pointers.py
Sin embargo, with
y f.close()
son mucho más preferidos, y debe evitar rastrear a través de la gc
módulo a menos que realmente esté en un aprieto.