[英]calling destructor in python-2.7 slowing the code
我正在使用python2.7處理GRIB和netCDF格式的輸入/輸出文件。 該代碼可以讀取GRIB和netCDF格式的數據並以用戶選擇的格式寫入。 調用del析構函數以釋放內存。 我的析構函數如下所示:
def __del__(self):
""" netCDF : delete the init files and close the dataset
grib : release grib message (self.msg exists only for GRIB files)
"""
# GRIB
if self.msg :
ga.grib_release(self.msg)
# netCDF
else:
self.dataset.close()
try :
if os.path.isfile(self.fileName):
os.remove(self.fileName)
except :
pass
使用此析構函數的速度變慢,可能會在幾次迭代后進行編碼。 如果我注釋掉GRIB的部分(當我使用netCDF時),反之亦然,則代碼正常運行。 但是使用if循環會使代碼在讀取/寫入15個文件后非常緩慢。 誰能幫助我指出我可能犯的錯誤!
正如評論中提到的那樣,如果沒有更多有關上下文的信息,幾乎不可能真正回答您的問題。 話雖這么說,但有幾點值得一提...
首先,最重要的是: 使用__del__
往往會導致問題超出解決之道 。處理正確的資源重新分配的正確方法是擁有一個“清理”方法並確保手動調用它(如果您是唯一用戶,可能就足夠了)類,並且這是唯一使用它的地方),或者將您的類設置為上下文管理器 。
第二點: if <this is format one>
/ else # this is format two
,讓同一個類處理兩種不同的格式,並使整個類代碼混亂, if <this is format one>
肯定是設計的味道。 假設兩種格式的大多數類代碼都是相同的,則看起來您想使用通用API但使用不同的實現將特定於格式的部分提取到其他類(每種格式一個),並將所有特定於格式的動作委派給合適的一個。 這被稱為策略模式 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.