我使用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个文件)后非常慢。有人能帮我指出我可能犯的错误吗?
发布于 2018-04-10 11:05:57
正如在一篇评论中提到的,如果没有更多关于上下文的信息,几乎不可能真正回答你的问题。尽管如此,有几点值得提一下.
首先也是最重要的: 导致的问题比它解决的更多处理正确的资源分配的正确方法要么有一个“清除”方法,然后确保手动调用它(如果您是这个类的唯一用户,并且这是唯一使用它的地方,那么可能就足够了),或者使您的类成为上下文管理器。
第二点:让同一个类处理两种不同的格式,并让整个类代码杂乱无章地进行if <this is format one> / else # this is format two检查,这无疑是一种设计风格。将大多数类代码相加对于这两种格式都是相同的,看起来您希望使用一个通用API将特定于格式的部分提取到其他类(每个格式一个),并将所有特定于格式的操作委托给适当的类。这就是所谓的战略模式。
https://stackoverflow.com/questions/49751488
复制相似问题