Хороший способ (и / или независимое от платформы место) для кэширования данных из сети - PullRequest
2 голосов
/ 13 сентября 2011

Моя программа pygtk - это редактор документов на основе XML, которые ссылаются на другие документы, возможно, в Интернете, которые, в свою очередь, могут ссылаться на другие документы.

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

Есть ли типичные способы, которыми это делается? Моя идея до сих пор будет:

  • Получить путь к каталогу кэша каким-либо образом (не зависит от платформы)
    • Есть идеи?
  • Поместите туда файл с именем md5(url).
  • Если файл кэша уже существует и он не старше $cache_policy_age, возьмите его, в противном случае используйте HTTP (может urllib сделать это?), Чтобы проверить, был ли он изменен с момента загрузки.

1 Ответ

3 голосов
/ 13 сентября 2011

Personnaly Я использую os.path.expanduser , чтобы найти подходящее место для кэшей, это довольно часто встречается в среде Unix, где большая часть конфигурации / кэша текущего пользователя сохраняется в его домашнем каталоге, использование имя каталога, начинающееся с точки, делая «скрытый» каталог.

Я бы сделал что-то вроде:

directory = os.path.join(os.path.expanduser("~"), ".my_cache")

Что касается даты изменения удаленного файла, вы можете использовать urlib:

import urllib
u = urllib.urlopen("http://www.google.com")
u.info().get("last-modified")

Однако вы должны убедиться, что ваш HTTP-сервер предоставляет последний измененный HTTP-заголовок и что это связное значение! (Это не всегда так)

...