Найти - Пользователи
Полная версия: python освобождение памяти
Начало » Python для новичков » python освобождение памяти
1
droff
Доброго времени суток!
Подскажите пожалуйста:
Есть python 2.7.3 , проблема с освобождением памяти даже после принудительного запуска gc.collect()
а = []
for i in xrange(10000000):
    a.append(i)
del a
import gc
gc.collect()

Почему так может быть?
Soteric
Как вы проверяете освободилась память или нет? Вы проверяли, что эта память не будет отдана другому процессу по требованию? Вы уверены, что при повторном выполнении операции будет занято еще столько же памяти, а не переиспользована прежняя?
droff
Soteric
Как вы проверяете освободилась память или нет? Вы проверяли, что эта память не будет отдана другому процессу по требованию? Вы уверены, что при повторном выполнении операции будет занято еще столько же памяти, а не переиспользована прежняя?

> как вы проверяете освободилась память или нет?
ps, pmap, top Память не то что совсем не освобождается, но большая часть все равно так и остается висеть

>Вы проверяли, что эта память не будет отдана другому процессу по требованию?
уверен так как она физически занимает память

>Вы уверены, что при повторном выполнении операции будет занято еще столько же памяти, а не переиспользована прежняя?

уверен, так как при повторной операции она увеличивается вдвое
Singularity
droff
возможно это сам интерпретатор висит в памяти ?
И вместо
droff
gc.collect()
использовать kill ?
droff
>возможно это сам интерпретатор висит в памяти ?
нет, интерпретатор копейки занимает, повторюсь память растет

>использовать kill ?
Это костыль а не решение, Вы еще скажите интерпретатор не запускать…

Вопрос из-за чего память утекает ….
adray
Скорее всего из-за free-lists:
1
2

При удалении объекта (скажем, инта) в питоне, ставится соответствующий маркер в free-list. При создании нового объекта память реиспользуется.

Если несколько раз проделать
a = []
for i in xrange(10000000):
    a.append(i)
del a
то потребление памяти не увеличится
droff
adray
Скорее всего из-за free-lists:12При удалении объекта (скажем, инта) в питоне, ставится соответствующий маркер в free-list. При создании нового объекта память реиспользуется.Если несколько раз проделать

Похоже на правду, спасибо!

Хотя очень интересно, возможно это зависит от платформы на которой запущен python
Я опробовал тот же фокус провернуть на винде (win7), так там память освобождалась сразу после gc.collect()
JOHN_16
droff
это точно зависит от платформы, так как UNIX и Windows в этом плане сильно отличаются
s0rg
Dont panic!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB