GDAL Python में डेटासेट बंद क्यों करें?


17

मैं पायथन GDAL कोड में अक्सर देखता हूं कि लोग अपनी स्क्रिप्ट के अंत में डेटासेट बंद कर देते हैं। Python GDAL में डेटासेट बंद करना क्यों समझ में आता है? अगर मैं ऐसा नहीं करता तो क्या कोई परिणाम होता है?

import gdal

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

# close dataset
ds = None

कभी-कभी सी ++ डिस्ट्रॉक्टर सफाई के अलावा (कुछ ड्राइवरों के लिए) चीजों को करता है, जैसे कि पुनर्संयोजन के आँकड़े। यह किसी के लिए भी सेट करने के लिए अच्छा अभ्यास है, सब कुछ blah238 कहते हैं कि सही है AFAIK।

जवाबों:


15

मुझे नहीं लगता कि स्क्रिप्ट के अंत में इसका कोई उद्देश्य है , क्योंकि स्क्रिप्ट से बाहर निकलने पर पायथन कचरा कलेक्टर अपने आप ही काम करेगा। कारण यह हो सकता है कि आप इसे अपनी स्क्रिप्ट के बीच में रखना चाहते हैं, ताकि डेटासेट तक पहुँचने के लिए रखे गए संसाधनों को पुनर्प्राप्त किया जा सके, फ़ाइल लॉक आदि को हटाया जा सके, ताकि आप उनका पुन: उपयोग कर सकें।

del ds एक ही प्रभाव होना चाहिए, लेकिन इसके इरादे के रूप में अधिक स्पष्ट है।

अधिक पायथनिक दृष्टिकोण एक withकथन का उपयोग करना होगा , लेकिन GDAL / OGR इसे लागू नहीं करता है। हालाँकि, Rasterio और Fiona जैसे कुछ GDAL / OGR रैपर हैं।


2
पायथन फ़ाइल ऑब्जेक्ट पर विचार करें। आप एक को खोलते हैं f = open(filename)और आप एक को बंद करते हैं f.close()del fया नहीं f = None। क्यों? क्योंकि वस्तुओं का क्या होता है क्योंकि वे अब संदर्भित नहीं हैं, दुभाषिया के कार्यान्वयन का एक विवरण है और क्योंकि स्पष्ट रूप से निहित ( python.org/dev/peps/pep-0020 ) से बेहतर है ।
sgillies

1
सहमत, लेकिन GDAL पायथन बाइंडिंग बिल्कुल पायथन नहीं हैं। एक GDALClose()विधि है जिसे कहा जाना चाहिए यदि आप स्पष्ट होना चाहते हैं (मुझे लगता है कि रैस्टोरियो इसे आंतरिक रूप से कहता है )।
blah238

2
पायथन में, GDALClose()लागू नहीं किया गया है, लेकिन डेटासेट को None(यानी ds = None) सेट करना बराबर है।
आर्थर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.