2016-06-14 2 views
2

Я думаю, что у меня возникает утечка памяти при загрузке .yml file с библиотекой PyYAML.Утечка памяти с PyYAML

Я следовал следующие шаги:

import yaml 
d = yaml.load(open(filename, 'r')) 

Память, используемая в процессе (я получил его с top или htop) выросла с 60K до 160M в то время как размер файла меньше, чем 1M.

Затем я сделал следующую команду:

sys.getsizeof(d) 

И он вернулся значение ниже, чем 400K.

Я также пытался использовать сборщик мусора с gc.collect(), но ничего не произошло.

Как вы можете видеть, кажется, что есть утечка памяти, но я не знаю, что ее производит, и я не знаю, как освободить этот объем памяти.

Любая идея?

ответ

0

Ваш подход не показывает утечку памяти, он просто показывает, что PyYAML использует много памяти при обработке файла YAML умеренного размера.

Если бы вы сделали:

import yaml 
X = 10 
for x in range(X): 
    d = yaml.load(open(filename, 'r')) 

И размер памяти, используемый программой будет меняться в зависимости от того, что вы установили X к, то есть основания предположить, что существует утечка памяти.

В тестах, которые я запускал, это не тот случай. Это просто, что загрузчик по умолчанию и SafeLoader занимает около 330x размер файла в памяти (на основе произвольного размера 1Mb, т. Е. Нет тегов, файла YAML) и CLoader размером около 145x, что и размер файла.

Загрузка данных YAML несколько раз не увеличивает, поэтому load() возвращает память, которую он использует, что означает, что утечки памяти нет.

Это не значит, что это похоже на огромное количество накладных расходов.

Смежные вопросы