У меня есть супер-огромный массив, память, выделенная для него, никогда не становится свободной снова. Я просто демонстрирую свою ситуацию, чтобы вы сами могли увидеть проблему.
Память, выделенная для простых числовых массивов, будет немедленно освобождена после того, как эта переменная может быть удалена (как показано ниже, я ее удаляю):
import numpy as np
X = np.ones((40000, 40000))
X.nbytes
12800000000
del(X)
Когда я запускаю приведенный выше код, все 12 ГБ памяти немедленно освобождаются. Но в случае с вложенными массивами numpy все становится сложнее:
import numpy as np
import random
foo = np.array([np.array([np.ones((256,)) for j in range(random.randint(100, 150))]) for i in range(40000)])
sum(f.nbytes for f in foo)
10240481280
del(foo)
Теперь 10 ГБ памяти никогда не освободятся, даже если вы запустите gc.collect()
явно. Ребята, у вас есть какие-либо подсказки?
P.S : env: Ubuntu + Python 2.7 + numpy 1.15.1