Как ОС обрабатывает Python dict, который больше, чем память? - PullRequest
4 голосов
/ 10 марта 2010

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

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

Ответы [ 4 ]

5 голосов
/ 10 марта 2010

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

2 голосов
/ 10 марта 2010

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

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

1 голос
/ 10 марта 2010

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

1 голос
/ 10 марта 2010

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

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

...