Как получить программный доступ к данным (загрузить маринованный файл), которые хранятся в виде статического файла?

1

как это решение я использую сейчас:

У меня есть файл размером 1 МБ .dbf в том же каталоге всех моих .py-модулей. В main.py у меня есть

import tools

В tool.py код:

the_list_that_never_changes = loadDbf(file).variables['CNTYIDFP'].

Итак, the_list_that_never_changes загружается только один раз и всегда в памяти готов к использованию... правильно?

Теги:
google-app-engine

2 ответа

2
Лучший ответ

Статические файлы хранятся отдельно от файлов приложений. Если вам нужно загрузить data.pkl из main.py, то не помечать его как статический файл, и он будет доступен main.py как любой другой файл приложения.

Ссылка: Конфигурация приложения Обработчики для статических файлов.


Альтернатива: почему бы не определить информацию, хранящуюся в data.pkl, как глобальную переменную в вашем источнике Python? Тогда вам не придется беспокоиться о чтении файла и десериализации его маринованного содержимого, и это будет немного быстрее. Это также упростит использование кеширования приложений - ваши данные будут загружены один раз, а затем будут кэшироваться для использования последующими запросами.

  • 0
    Ваш альтернативный вариант не обязательно будет более быстрым: Python все равно должен загрузить и проанализировать модуль, в который вы встроили рассол (или текстовое представление), что не должно быть быстрее загрузки рассола.
  • 0
    Я изменил мой вопрос выше теперь, когда я понимаю, что могу просто добавить файлы данных в том же каталоге, что и модули py
Показать ещё 2 комментария
0

Поместите data.pkl в тот же каталог с помощью main.py и используйте что-то в этих строках:

pickle_path = os.path.join(os.path.dirname(__file__), 'data.pkl')
f = open(pickle_path)
data = pickle.load(f)

Не добавляйте data.pkl в app.yaml.

Если вы часто читаете эти данные, это может быть полезно для memcache после рассыпания. Затем вы можете прочитать его из memcache, который обычно быстрее, чем чтение файла с диска.

  • 0
    Мне по-прежнему любопытно. Во-первых: с вашим решением теперь нет «данных» в памяти? так зачем мне это в memcache?
  • 0
    пожалуйста, смотрите новую версию вопроса спасибо!
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню