1 回答

TA貢獻1864條經(jīng)驗 獲得超6個贊
在我們的例子中,看起來像泄漏的原因是我們的python代碼消耗RAM的速度比python垃圾回收器愿意清理垃圾的速度快。
在我們的例子中,解決方案是在腳本中每個工作單元結(jié)束時強制進行手動垃圾回收,如下所示:
gc.collect()
這讓內(nèi)存得到了控制。
證明似乎正在泄漏的特定代碼沒有泄漏,并通過 tracemalloc 庫進行了確認。收集垃圾,拍攝快照,然后比較前后快照,以證明沒有分配額外的內(nèi)存。
for _ in range(10000):
gc.collect();
snapshot1 = tracemalloc.take_snapshot()
response = test_parsing("assets.xml")
del response
gc.collect();
snapshot2 = tracemalloc.take_snapshot()
top_stats = snapshot2.compare_to(snapshot1, 'lineno')
print("[ Non Zero differences ]")
for stat in top_stats:
if (stat.size_diff != 0):
print(stat)
在我們的例子中,上面的非零差異列表在每次迭代后都是空的,證明沒有泄漏。
添加回答
舉報