2012-11-26 82 views
3

我有我的字典與下面的數據,Python進程不釋放內存

my_dict = {'item_1': <generator object continuation_stripper at 0xda78640>, 
      'only_display_attrs': <generator object continuation_stripper at 0xda78690>, 
      'item_2': <generator object continuation_stripper at 0xda786e0>} 

而且我在字典值only_display_attrs試圖循環,這個字典值是一個生成器對象。

這是我的代碼,

for item in my_dict['only_display_attrs']: 
    yield i 

注:only_display_attrsSQLAlchemy發電機對象。

此循環消耗高達1100 MB的內存用於30,000行數據,並且不釋放內存,直到手動終止進程。

任何人都可以幫助我理解背後的原因。

+1

你怎麼知道內存沒有被釋放?內存只在垃圾收集器決定內存對於其他操作是必需的並且必須被恢復時才被釋放。另外,有些操作系統往往不會回收內存,直到真正需要。所以,如果沒有內存請求,看到內存使用量增加並且不縮水並不罕見。 –

回答

1

相關位是您對所生成的值所做的操作。如果你把它們放在一邊,那麼內存將永遠不會被釋放。但在顯示的代碼中,沒有內存被用完(除非continuation_stripper代碼中有一些錯誤)。