Утечка памяти Scipy loadmat - PullRequest
2 голосов
/ 05 июня 2019

Я использую scipy loadmat для загрузки некоторых данных из файлов .mat.Тем не менее, я заметил, что он занимает много оперативной памяти ~ 1 Гб на файл .mat.Я знаю, что файлы .mat сжаты и т. Д., Но это все равно выглядело как много памяти, поэтому я попытался выяснить, почему это происходит.

Я сделал простой фрагмент кода и заметил, что без загрузки данных мое приложение занимает ~ 25 МБ ОЗУ, а при загрузке данных - около 1 ГБ ОЗУ.Более того, эта память не освобождается при выходе из функции, вызывающей scipy loadmat.Чтобы сделать пример кода еще более фиктивным, я попытался даже не брать результаты из scipy loadmat, а просто вызвать эту функцию, но даже тогда 1 ГБ оперативной памяти все еще остается занятым.

Я такжепопытался явно вызвать сборщик мусора, но он освободил бы около ~ 100 МБ и все еще ~ 900 МБ остается занятым.Это почему?Почему память, используемая моим процессом, не составляет ~ 25 МБ при возврате из функции loadData?Loadmat должен загрузить данные из файла .mat в память, но, поскольку никто не ссылается на него, почему он не свободен?

import scipy.io
import os

import gc
import time

file_names = ["data.mat"]


def loadData():
    input_files_no = len(file_names)

    for i in range(input_files_no):
        scipy.io.loadmat(os.path.join("..", "data", file_names[i]), struct_as_record=False, squeeze_me=True, mat_dtype=True)

    return


def main():
    loadData()

    a = 0
    print("passed")
    while True:
        time.sleep(5)
        a = a + 1
        gc.collect()


main()
...