GDAL Python에서 데이터 세트를 닫는 이유는 무엇입니까?


17

파이썬 GDAL 코드에서 사람들이 스크립트 끝에서 데이터 세트를 닫는 것을 자주 볼 수 있습니다. Python GDAL에서 데이터 세트를 닫는 것이 왜 합리적입니까? 내가하지 않으면 어떤 결과가 있습니까?

import gdal

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

# close dataset
ds = None

때때로 C ++ 소멸자는 재 계산 통계와 같이 정리 (일부 드라이버의 경우) 이외의 작업을 수행합니다. 없음으로 설정하는 것이 좋습니다. blah238의 모든 내용은 AFAIK도 정확합니다.

답변:


15

파이썬 가비지 수집기가 스크립트가 종료되면 자동으로 동일한 작업을 수행하므로 스크립트 끝에 목적이 없다고 생각합니다 . 스크립트의 중간에 데이터 세트에 액세스하여 보유한 자원을 복구하고 파일 잠금을 제거하여 재사용 할 수 있도록하기위한 이유가 있습니다.

del ds 동일한 효과를 가져야하지만 의도와 관련하여 더 명확합니다.

더 파이썬적인 접근 방식은 withstatement 를 사용하는 것이지만 GDAL / OGR은이를 구현하지 않습니다. 그러나 RasterioFiona 와 같은 일부 GDAL / OGR 래퍼 가 있습니다.


2
파이썬 파일 객체를 고려하십시오. 당신은 하나를 열고 당신은 하나 f = open(filename)를 닫습니다 f.close(). 하지 del ff = None. 왜? 객체가 더 이상 참조되지 않은 후에 발생하는 일은 인터프리터의 구현에 대한 세부 사항이며 명시 적이 암시 적보다 낫기 때문에 ( python.org/dev/peps/pep-0020 ).
sgillies

1
동의하지만 GDAL Python 바인딩은 정확히 Pythonic이 아닙니다. 있습니다 GDALClose()당신은 (내가 볼 명시 할 경우 호출 할 필요가 방법 Rasterio이 내부적으로 호출 ).
blah238

2
파이썬에서는 GDALClose()구현되지 않았지만 데이터 세트를 None(즉, ds = None) 로 설정하는 것은 동일합니다.
Arthur
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.