簡體   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