繁体   English   中英

在python-2.7中调用析构函数减慢代码

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM