2010-03-10 1 views
3

У меня есть программа python, которая собирается съесть много памяти, прежде всего в дикторе. Этот dict будет отвечать за присвоение уникального целочисленного значения очень большому набору ключей. Поскольку я работаю с большими матрицами, мне нужно соответствие между ключами, которое также может быть восстановлено (т. Е. Как только вычисления матрицы закончены, мне нужно сопоставить значения с исходными ключами).Как ОС обрабатывает питон python, который больше памяти?

Я считаю, что эта сумма в конечном итоге превысит доступную память. Мне интересно, как это будет обрабатываться в отношении пространства подкачки. Возможно, для этой цели существует лучшая структура данных.

+0

Больше, чем физическая память? Чем больше файл подкачки? Что вы подразумеваете под «доступной памятью»? –

ответ

0

Это просто закончится в процессе обмена свопами, потому что хеш-таблица имеет очень рандомизированные шаблоны доступа к памяти.

Если вы знаете, что карта превышает размер физической памяти, вы можете рассмотреть возможность использования структуры данных на диске в первую очередь. Это особенно важно, если вам не нужна структура данных во время вычисления. Когда хеш-таблица вызывает свопинг, она создает проблемы также вне самой хэш-таблицы.

+2

Вы называете «хламом» – aehlke

5

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

1

Swap space - это функция ядра и прозрачность для пользователя (python).

Если у вас огромный диктофон и вам не нужны все данные сразу, вы можете посмотреть redis, который может делать то, что вы хотите. Или, может быть, нет :)

0

Насколько я помню, когда расшифровывается dict, он просто полагается на malloc C. Программа будет работать до тех пор, пока malloc продолжит выполнение. Большинство ОС будут поддерживать работу malloc до тех пор, пока будет достаточно памяти, а затем до тех пор, пока есть страницы, которые можно поменять местами. В любом случае Python будет генерировать исключение MemoryError, если malloc завершится с ошибкой, согласно documentation. Что касается структуры данных, то dict будет очень эффективным по размеру. Единственный способ сделать это лучше - использовать аналитическую функцию для сопоставления значений взад и вперед.

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