Python有沒有已知的內存泄漏?我正在研究Python腳本,其代碼如下所示,使用,由於某些原因導致內存泄漏。本例中的「while True
」用於測試調用函數引起的泄漏。它被Windows上使用Python 2.5.4運行:Python:CTypes結構內存泄漏
import ctypes
def hi():
class c1(ctypes.Structure):
_fields_=[('f1',ctypes.c_uint8)]
class c2(ctypes.Structure):
_fields_=[('g1',c1*2)]
while True:
test=hi()
泄漏可以使用ProcessExplorer進行測試 - 因爲它不斷循環,Python會越來越多的內存佔用。它似乎需要有兩個Structure子類,其中一個類具有另一個類的「倍數」(使用*
運算符),但我不確定該條件是否比這更基本。即使循環中添加了del test
,仍然會泄漏內存。
關於可能導致此問題的任何想法?
編輯:因爲有人認爲它可能沒有垃圾回收的是,這裏是一個編輯的版本,做垃圾收集,但仍然出現內存泄漏:
import gc
import ctypes
def hi():
class c1(ctypes.Structure):
_fields_=[('f1',ctypes.c_uint8)]
class c2(ctypes.Structure):
_fields_=[('g1',c1*2)]
while True:
test=hi()
test2=gc.collect()
它泄漏多少?它爲每個創建的「c1」創建一個字節?有一個計數器,每打印50,000個電話給'hi()'左右,所以你知道。 – agf
在ProcessExplorer中,「工作集」內存每秒穩定增加大約20-30 KB,「私人字節」每隔一段時間都會穩步增長。大約12分鐘後,我已經超過59 MB的內存,並計算在解釋器中運行的第二個片段。如何在代碼中放置一個計數器,告訴你有多少內存被佔用?任何人都可以在此證實我嗎? – user553702
最簡單的方法是在頂部添加'from itertools import count',然後在count():中將c改爲'true:',然後在循環中添加'如果不是c%50000:print c' 。然後,如果「印刷品」過於頻繁或不常用,則增加或減少「50000」。 – agf