Tại sao đóng một tập dữ liệu trong GDAL Python?


17

Tôi thấy khá thường xuyên trong mã Python GDAL rằng mọi người đóng bộ dữ liệu ở cuối tập lệnh của họ. Tại sao nó có ý nghĩa để đóng một tập dữ liệu trong Python GDAL? Có hậu quả gì không nếu tôi không làm điều đó?

import gdal

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

# close dataset
ds = None

Đôi khi, hàm hủy C ++ thực hiện những việc khác ngoài dọn dẹp (đối với một số trình điều khiển), chẳng hạn như tính toán lại số liệu thống kê. Đó là một thực hành tốt để đặt thành Không, mọi thứ blah238 nói cũng đúng như AFAIK.

Câu trả lời:


15

Tôi không nghĩ rằng điều này có bất kỳ mục đích nào ở cuối tập lệnh, vì trình thu gom rác Python sẽ tự động làm điều tương tự khi tập lệnh thoát. Lý do bạn có thể muốn thực hiện là ở giữa tập lệnh của mình, để khôi phục tài nguyên được giữ bằng cách truy cập tập dữ liệu, xóa khóa tệp, v.v. để bạn có thể sử dụng lại chúng.

del ds nên có tác dụng tương tự nhưng rõ ràng hơn như ý định của nó.

Cách tiếp cận Pythonic nhiều hơn sẽ là sử dụng một withtuyên bố , nhưng GDAL / OGR không thực hiện nó. Tuy nhiên, có một số trình bao bọc GDAL / OGR như RasterioFiona .


2
Hãy xem xét các đối tượng tệp Python. Bạn mở một với f = open(filename)và bạn đóng một với f.close(). Không del fhay f = None. Tại sao? Bởi vì những gì xảy ra với các đối tượng sau khi chúng không còn được tham chiếu là một chi tiết về việc triển khai trình thông dịch và bởi vì rõ ràng là tốt hơn so với ẩn ( python.org/dev/peps/pep-0020 ).
sgillies 17/12/13

1
Đồng ý, nhưng các ràng buộc Python GDAL không chính xác là Pythonic. Có một GDALClose()phương pháp nên được gọi nếu bạn muốn rõ ràng (tôi thấy rằng Rasterio gọi phương thức này trong nội bộ ).
blah238

2
Trong Python, GDALClose()chưa được triển khai nhưng đặt tập dữ liệu thành None(nghĩa là ds = None) là tương đương.
Arthur
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.