Ich sehe ziemlich oft in Python GDAL-Code, dass Leute Datensätze am Ende ihres Skripts schließen. Warum ist es sinnvoll, einen Datensatz in Python GDAL zu schließen? Gibt es irgendwelche Konsequenzen, wenn ich es nicht tue?
import gdal
# open dataset
ds = gdal.Open('test.tif')
# close dataset
ds = None
Antworten:
Ich glaube nicht, dass dies am Ende des Skripts einen Sinn hat , da der Python-Garbage-Collector dasselbe automatisch macht, wenn das Skript beendet wird. Möglicherweise möchten Sie dies in der Mitte Ihres Skripts tun, um die Ressourcen wiederherzustellen, die durch den Zugriff auf das Dataset gehalten werden, Dateisperren zu entfernen usw., damit Sie sie wiederverwenden können.
del ds
sollte den gleichen Effekt haben, ist aber klarer in Bezug auf seine Absicht.Der pythonischere Ansatz wäre, eine
with
Anweisung zu verwenden , aber GDAL / OGR implementiert sie nicht. Es gibt jedoch einige GDAL / OGR-Wrapper wie Rasterio und Fiona , die dies tun.quelle
f = open(filename)
und Sie schließen eine mitf.close()
. Nichtdel f
oderf = None
. Warum? Weil das, was mit Objekten geschieht, nachdem sie nicht mehr referenziert wurden, ein Detail der Implementierung des Interpreters ist und weil explizit besser ist als implizit ( python.org/dev/peps/pep-0020 ).GDALClose()
Methode, die aufgerufen werden sollte, wenn Sie explizit sein möchten (ich sehe, dass Rasterio dies intern aufruft ).GDALClose()
nicht implementiert, aber das Festlegen des Datasets aufNone
(dhds = None
) ist äquivalent.