GDAL Pythonでデータセットを閉じるのはなぜですか?


17

Python GDALコードには、スクリプトの最後でデータセットを閉じる人がいることがよくあります。Python GDALでデータセットを閉じるのが理にかなっているのはなぜですか?実行しないと、結果はありますか?

import gdal

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

# close dataset
ds = None

C ++デストラクタは、統計の再計算など、クリーンアップ(ドライバーによっては)以外のことを行う場合があります。Noneに設定することをお勧めします。blah238が言っていることはすべて正しいです。

回答:


15

Pythonのガベージコレクターはスクリプトの終了時に同じことを自動的に行うため、これはスクリプトの最後に何の目的もないと思います。データセットにアクセスして保持されているリソースを回復したり、ファイルロックを削除したりするなどして、再利用できるようにするために、スクリプトを実行する理由があります。

del ds 同じ効果があるはずですが、その意図はより明確です。

よりPython的なアプローチはwithstatementを使用することですが、GDAL / OGRはそれを実装しません。ただし、RasterioFionaなどのGDAL / OGRラッパーがいくつかあります。


2
Pythonファイルオブジェクトを検討してください。で開き、f = open(filename)で閉じますf.close()。ではありませんdel ff = None。どうして?オブジェクトが参照されなくなった後に起こることは、インタプリタの実装の詳細であり、明示的は暗黙的よりも優れているためです(python.org/dev/peps/pep-0020)。
13

1
同意しましたが、GDAL Pythonバインディングは正確にはPythonicではありません。GDALClose()明示的にしたい場合に呼び出すメソッドがあります(Rasterioがこれを内部的に呼び出すことがわかります)。
blah238

2
Pythonでは、GDALClose()実装されていませんが、データセットをNone(つまりds = None)に設定することは同等です。
アーサー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.