Python 2: сбор мусора не удался?Python

Программы на Python
Ответить
Anonymous
 Python 2: сбор мусора не удался?

Сообщение Anonymous »

Рассмотрим следующий сценарий:

Код: Выделить всё

l = [i for i in range(int(1e8))]
l = []
import gc
gc.collect()
# 0
gc.get_referrers(l)
# [{'__builtins__': , 'l': [], '__package__': None, 'i': 99999999, 'gc': , '__name__': '__main__', '__doc__': None}]
del l
gc.collect()
# 0
Дело в том, что после всех этих шагов использование памяти этим процессом Python на моей машине составляет около 30 % (Python 2.6.5, дополнительная информация по запросу?) .
Вот отрывок из вывода top:

Код: Выделить всё

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
5478 moooeeeep 20   0 2397m 2.3g 3428 S    0 29.8   0:09.15 ipython
соответственно. PS aux:

Код: Выделить всё

moooeeeep 5478  1.0 29.7 2454720 2413516 pts/2 S+   12:39   0:09 /usr/bin/python /usr/bin/ipython gctest.py
Согласно документации gc.collect:


Не все элементы в некоторых свободных списках могут быть освобождены из-за конкретной реализации, в частности int и float.


Означает ли это, что если мне (временно) понадобится большое количество различных int или float, мне нужно экспортировать это в C/C++, потому что сборщик мусора Python не может освободить память?



Обновить

Вероятно виноват переводчик, как подсказывает эта статья:


Вы создали 5 миллионов целые числа одновременно живы, и каждый объект int занимает 12 байт. «Для скорости» Python поддерживает внутренний свободный список для целочисленных объектов. К сожалению, этот бесплатный список бессмертен и неограничен по размеру. float также использует бессмертный и неограниченный свободный список.


Однако проблема остается, поскольку я не могу избежать этого объема данных (метка времени/значение пары от внешнего источника). Действительно ли я вынужден отказаться от Python и вернуться к C/C++?



Обновление 2 >

Возможно, действительно, проблема связана с реализацией Python. Нашел этот ответ, убедительно объясняющий проблему и возможный обходной путь.

Подробнее здесь: https://stackoverflow.com/questions/961 ... tion-fails
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»