Как сделать доступными только для чтения данные через запросы diff во время работы сервера (apache, mod_python)

1

Я использую Apache/2.2.8 (Ubuntu) mod_python/3.3.1 Python/2.5.2, и я хотел бы предварительно загрузить данные, с которыми я работаю.

В настоящее время я читаю данные из файла на диске каждый раз, когда получаю запрос, затем разбираю его и сохраняю в объекте. Файл данных относительно велик, и я хотел бы его заранее разобрать/предварительно загрузить.

Я думал, что смогу либо 1) загрузить данные в память при запуске apache (от 100 МБ до 500 МБ данных будет находиться в памяти во время работы сервера), или я мог бы 2) загрузить его, когда будет отправлен первый запрос данных и сохраните его в памяти, пока я не закрою сервер.

ниже - макет второй идеи:

from mod_python import apache
from mod_python import Session

gvar = 0

def handler(req):
    req.content_type = 'text/plain'

    session = Session.Session(req)
    if session.is_new():
        global gvar
        req.write('gvar was originally : '+str(gvar))
        gvar = 314
        session['addr'] = req.connection.remote_ip
        session.save()
        req.write('\ngvar was just set to: '+str(gvar))
    else:
        global gvar
        req.write('gvar set to: '+str(gvar))

    return apache.OK  

вывод (сеанс один):
gvar изначально: 0
gvar был установлен только: 314

вывод (сеанs > 1):
gvar установлен на: 314

Поделитесь своими комментариями и решениями, ТНХ

  • 0
    Взгляните на ленивую реализацию в Python: en.wikipedia.org/wiki/Lazy_initialization#Python
  • 0
    Ваш вопрос о программном паттерне для ленивого init, или о механизме предварительного кэширования больших кусков данных, или обоих?
Показать ещё 5 комментариев
Теги:
mod-python

3 ответа

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

Вы можете установить монтирование tmpfs (или ramfs) с данными, и оно останется в ОЗУ (tmpfs могут отправлять данные для обмена).

0

Другой вариант - использовать posix_ipc для хранения данных в общей памяти, доступных для всех процессов.

0

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

  • 0
    мои данные в текстовом формате
  • 0
    Я хотел бы избежать сериализации, так как это не экономит мне много времени, когда я читаю данные с диска (с данными obj связано много метаинформации). Не могли бы вы также уточнить, что вы подразумеваете под «наряду с кэшированием ОС»?
Показать ещё 3 комментария

Ещё вопросы

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