জিডিএল পাইথনে কোনও ডেটাसेट কেন বন্ধ করবেন?


17

আমি পাইথন জিডিএল কোডে প্রায়শই দেখতে পাই যে লোকেরা তাদের স্ক্রিপ্টের শেষে ডেটাসেটগুলি বন্ধ করে। পাইথন জিডিএল-তে কোনও ডেটাसेट বন্ধ করা কেন বোধগম্য? আমি এটি না করলে কি কোনও পরিণতি হয়?

import gdal

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

# close dataset
ds = None

কখনও কখনও সি ++ ডেস্ট্রাক্টর পরিস্কার করা (কিছু ড্রাইভারের জন্য) ব্যতীত অন্য কিছু করে, যেমন পরিসংখ্যানগুলি পুনরায় হিসাব করে। কোনওটিই সেট করা ভাল অনুশীলন নয়, ব্লাহ 238 যা বলেছে তা এএফএইকেও সঠিক।

উত্তর:


15

স্ক্রিপ্টের শেষে এর কোনও উদ্দেশ্য আছে বলে আমি মনে করি না , কারণ স্ক্রিপ্টটি প্রস্থান করলে পাইথন আবর্জনা সংগ্রহকারী স্বয়ংক্রিয়ভাবে একই জিনিসটি করবে। আপনি যে কারণটি এটি করতে চাইতে পারেন তা হ'ল আপনার স্ক্রিপ্টের মাঝামাঝি সময়ে, ডেটাসেট অ্যাক্সেস করে রাখা সম্পদগুলি পুনরুদ্ধার করা, ফাইল লকগুলি অপসারণ করা ইত্যাদি যাতে আপনি সেগুলি পুনরায় ব্যবহার করতে পারেন।

del ds একই প্রভাব থাকতে হবে তবে এর উদ্দেশ্য সম্পর্কে আরও স্পষ্ট।

পাইথোনিক পদ্ধতির পক্ষে আরও একটি withবিবৃতি ব্যবহার করা হবে তবে জিডিএল / ওজিআর এটি প্রয়োগ করে না। যাইহোক, মত কিছু GDAL / OGR চাদরে হয় Rasterio এবং Fiona, কি করতে পারে।


2
পাইথন ফাইল বস্তু বিবেচনা করুন। আপনি একটি দিয়ে খুলুন f = open(filename)এবং আপনি একটি সাথে বন্ধ করুন f.close()। না del fবা f = None। কেন? কারণ বস্তুগুলিতে তাদের আর রেফারেন্স না হওয়ার পরে যা ঘটে তা হ'ল দোভাষীদের বাস্তবায়নের একটি বিশদ এবং কারণ সুস্পষ্ট বর্ণনাকারীর চেয়ে ভাল ( পাইথোন.আর / দেব / পেপস / পেপ -২০২০ )।
সাগিলি

1
সম্মত, তবে জিডিএল পাইথন বাইন্ডিংগুলি হুবহু পাইথোনিক নয়। এমন একটি GDALClose()পদ্ধতি রয়েছে যা আপনি স্পষ্ট করতে চাইলে ডাকা উচিত (আমি দেখি যে রাস্টারিও একে অভ্যন্তরীণভাবে ডাকে )।
blah238

2
পাইথনে, GDALClose()প্রয়োগ করা হয়নি তবে ডেটাসেট সেট করা None(অর্থাত্‍ ds = None), সমান।
আর্থার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.