Как избежать вычислений при каждой перезагрузке модуля python - PullRequest
6 голосов
/ 12 октября 2008

У меня есть модуль python, который использует огромную глобальную переменную словаря, в настоящее время я помещаю код вычисления в верхнюю часть, каждый раз, когда импорт или перезагрузка модуля занимает более одной минуты, что совершенно неприемлемо. Как я могу сохранить результат вычисления где-нибудь, чтобы при следующем импорте / перезагрузке его не нужно было вычислять? Я попробовал cPickle, но загрузка словарной переменной из файла (1,3 МБ) занимает примерно столько же времени, сколько и вычисления.

Чтобы получить больше информации о моей проблеме,

FD = FreqDist(word for word in brown.words()) # this line of code takes 1 min

Ответы [ 13 ]

0 голосов
/ 10 января 2009

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

Так что ... делая что-то подобное, вы убедитесь, что этот код выполняется только один раз.

try:
    FD
except NameError:
    FD = FreqDist(word for word in brown.words())
0 голосов
/ 12 октября 2008

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

0 голосов
/ 12 октября 2008

В продолжение идеи отложенных вычислений, почему бы не превратить dict в класс, который поставляет (и кэширует) элементы по мере необходимости?

Вы также можете использовать psyco для ускорения общего исполнения ...

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