Как справиться с нехваткой памяти с Python - PullRequest
1 голос
/ 19 ноября 2010

У меня есть огромные словари, которыми я манипулирую.Хэшировано более 10 миллионов слов.Это слишком медленно и некоторое время уходит из памяти.

Есть ли лучший способ справиться с этой огромной структурой данных?

Ответы [ 2 ]

9 голосов
/ 19 ноября 2010

Да. Это называется база данных. Поскольку у вас работает словарь (помимо проблем с памятью), я бы предположил, что база данных sqlite будет работать для вас нормально. Вы можете использовать sqlite3 довольно легко, и это очень хорошо задокументировано.

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

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

1 голос
/ 19 ноября 2010

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

Однажды я решил проблему Python MemoryError, переключившись с 32-битного Python на 64-битный Python . Фактически, некоторые структуры Python стали слишком большими для адресного пространства 4 ГБ. Возможно, вы захотите попробовать это как простое потенциальное решение вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...