Neden bir veri kümesini GDAL Python'da kapatmalıyız?


17

Python GDAL kodunda sık sık insanların komut dosyalarının sonunda veri kümelerini kapattığını görüyorum. Python GDAL'de bir veri kümesini kapatmak neden mantıklı? Yapmazsam herhangi bir sonuç var mı?

import gdal

# open dataset
ds = gdal.Open('test.tif')

# close dataset
ds = None

Bazen C ++ yıkıcı, istatistikleri yeniden hesaplama gibi temizleme (bazı sürücüler için) dışında başka şeyler de yapar. Hiçbiri olarak ayarlamak iyi bir uygulamadır, blah238'in söylediği her şey AFAIK için de doğrudur.

Yanıtlar:


15

Bu komut dosyasının sonunda herhangi bir amacı olduğunu düşünmüyorum , çünkü Python çöp toplayıcısı komut dosyası çıktığında otomatik olarak aynı şeyi yapacak. Bunu yapmak isteyebilmenizin nedeni, veri kümesine erişerek tutulan kaynakları kurtarmak, dosya kilitlerini kaldırmak vb. İçin komut dosyanızın ortasındadır.

del ds aynı etkiye sahip olmalı ama niyetine göre daha açık.

Daha Pythonic yaklaşım bir withifade kullanmak olacaktır , ancak GDAL / OGR bunu uygulamıyor. Ancak, Rasterio ve Fiona gibi bazı GDAL / OGR paketleyicileri var.


2
Python dosya nesnelerini düşünün. Birini ile açıyorsun f = open(filename)ve ile kapatıyorsun f.close(). Hayır del fya da f = None. Neden? Çünkü nesnelere artık referans verilmedikten sonra olan şey, tercümanın uygulanmasının bir detayıdır ve açık, örtükten daha iyidir ( python.org/dev/peps/pep-0020 ).
sgillies

1
Kabul edildi, ancak GDAL Python bağlamaları tam olarak Pythonic değil. GDALClose()Açık olmak istiyorsanız çağrılması gereken bir yöntem var ( Rasterio'nun bunu dahili olarak çağırdığını görüyorum ).
falan238

2
Python'da GDALClose()uygulanmadı, ancak veri kümesinin None(yani ds = None) olarak ayarlanması eşdeğerdir.
Arthur
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.