[英]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.