เหตุใดจึงปิดชุดข้อมูลใน GDAL Python


17

ฉันเห็นบ่อยครั้งในรหัส Python GDAL ที่ผู้คนปิดชุดข้อมูลในตอนท้ายของสคริปต์ เหตุใดจึงสมเหตุสมผลที่จะปิดชุดข้อมูลใน Python GDAL มีผลกระทบใด ๆ หรือไม่ถ้าฉันไม่ทำ

import gdal

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

# close dataset
ds = None

บางครั้งตัวทำลาย C ++ ทำสิ่งอื่นนอกเหนือจากการล้างข้อมูล (สำหรับไดรเวอร์บางตัว) เช่นการคำนวณสถิติใหม่ เป็นวิธีปฏิบัติที่ดีในการตั้งค่าเป็นไม่มีทุกอย่าง blah238 กล่าวว่าถูกต้องเช่นกัน AFAIK

คำตอบ:


15

ฉันไม่คิดว่านี่จะมีจุดประสงค์ใด ๆ ในตอนท้ายของสคริปต์เนื่องจากตัวรวบรวมขยะ Python จะทำสิ่งเดียวกันโดยอัตโนมัติเมื่อสคริปต์ออก เหตุผลที่คุณอาจต้องการทำให้มันอยู่ตรงกลางของสคริปต์เพื่อกู้คืนทรัพยากรที่เก็บไว้โดยการเข้าถึงชุดข้อมูลลบการล็อคไฟล์ ฯลฯ เพื่อให้คุณสามารถนำกลับมาใช้ใหม่ได้

del ds ควรมีผลเหมือนกัน แต่ชัดเจนยิ่งขึ้นตามความตั้งใจ

วิธี Pythonic ที่มากกว่านั้นก็คือการใช้withคำสั่งแต่ GDAL / OGR ไม่ได้ใช้มัน อย่างไรก็ตามมีบางห่อ GDAL / OGR เช่นRasterioและFionaที่ทำ


2
พิจารณาวัตถุไฟล์ Python คุณเปิดหนึ่งที่มีและคุณหนึ่งที่ใกล้ชิดกับf = open(filename) f.close()ไม่ได้หรือdel f f = Noneทำไม? เนื่องจากสิ่งที่เกิดขึ้นกับวัตถุหลังจากที่ไม่มีการอ้างอิงอีกต่อไปคือรายละเอียดของการใช้งานล่ามและเนื่องจากชัดเจนกว่าดีกว่านัย ( python.org/dev/peps/pep-0020 )
sgillies

1
เห็นด้วย แต่การผูก GDAL Python ไม่ใช่ Pythonic มีGDALClose()วิธีการที่ควรเรียกถ้าคุณต้องการชัดเจน (ฉันเห็นว่าRasterio เรียกสิ่งนี้ภายใน )
blah238

2
ใน Python GDALClose()ยังไม่ได้ใช้งาน แต่การตั้งค่าชุดข้อมูลเป็นNone(เช่น, ds = None) เทียบเท่า
อาเธอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.