В нашем случае причиной утечки было то, что наш код python потреблял ОЗУ быстрее, чем сборщик мусора python был готов очистить мусор.
Решение в нашем случае было принудительно выполнять сборку мусора вручную в конце каждой единицы работы в нашем скрипте следующим образом:
gc.collect()
Это контролировало память.
Доказательство того, что конкретный код, который казался утечка не утечка была подтверждена библиотекой tracemallo c. Мусор был собран, сняты снимки, а затем сопоставлены снимки до и после, чтобы доказать, что дополнительная память не выделялась.
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)
В нашем случае приведенный выше список ненулевых различий был пустым после каждой итерации , доказывая, что утечки не было.