1

メモリリークかどうかはわかりませんが、メモリリークのように見え、ここで解決策を見つけることができません. 完全なコードを貼り付けることはできませんが、漏れている部分は次のとおりです。

self.dctSpreads = defaultdict(list)

lstMat = ['2Y','3Y','4Y','5Y','6Y','7Y','8Y','9Y','10Y','12Y','15Y','20Y','25Y','30Y']

lstSpreads = ['A','B','C','D','E']

def __GetSpreadMDValues__(self):
        lstSpreadRIC = []
        lstSpreadVal = []

        #Construct proper RICs to extract the data
        for i in range(0, len(self.lstSpreads)):
            for j in range(0, len(self.lstMat)):
                lstSpreadRIC.append(self.lstMat[j])
            #get market data
            lstSpreadVal = self.__GetListDataSnaps__('FIELD1', lstCSASpreadRIC)
            self.dctSpreads[self.lstSpreads[i]] = lstCSASpreadVal
            lstSpreadRIC = []
            lstSpreadVal = []

問題は、self.dctSpreads(浮動値を持つリストの辞書である)メモリ使用量が増加しますが、クラスオブジェクトの操作が完了した後は解放されないことです。メソッドを呼び出すような単純なデストラクタを書いてみました

def Destructor(self):
        gc.collect()

私の走りを終える前に、それは助けにはなりませんでした。

どんな考えでも大歓迎です。

4

1 に答える 1

2

Python が未使用のメモリを Python スクリプトで使用できるようにするタイミングと、それが OS に返されるタイミングには違いがあります。前者は、オブジェクトへの参照がない場合 (CPython を想定) すぐに発生し、後者は、割り当てられたオブジェクトのタイプに応じて、Python インタープリターが終了するまで発生しない場合があります。これは正常であり、予期される動作です。

于 2013-04-30T18:55:59.307 に答える