Я разрабатываю сервер, который загружает граф networkX из файла gpickle
и по запросу getDerivedData
читает все, что ему нужно, из этого графического объекта и дает ответ. Я держу это как правило c, потому что детали getDerivedData
не важны.
Так как я разрабатываю это, мне нужна жесткая обратная связь l oop. Для этого я хочу перезагрузить свой сервер при изменении кода. Проблема в том, что файл gpickle
довольно большой (> 400 МБ) и загрузка его при каждой перезагрузке занимает слишком много времени.
Вопрос
Есть ли способ получить loading graph
и serving requests
как две независимые вещи, так что если я изменю код сервера, graph
останется в памяти, но server
перезагрузится с новыми изменениями?
Вещи, которые я пытался
Поскольку я не слишком знаком с python, я пробовал несколько вещей безуспешно
- Раскрутил сервер pyro4 , который загружает график и обслуживает его. Оказывается, я не могу просто отправить объект Python Графика напрямую, так как он не знает, как его сериализовать.
- Я подумал, может быть, если я прочитаю файл
gpickle
в двоичном виде и сохраню его на этом сервере, когда клиент запрашивает файл, он будет отправлен через сокет. Я думал, что это будет быстрее, чем чтение с диска. Я получаю аналогичную производительность - Я пытался использовать brain-plasma , чтобы иметь глобальный магазин. Та же проблема с сериализацией
- Я пытался использовать библиотеку reloadr . Я бы поместил код загрузки в начало моего скрипта, и у меня был бы основной файл, который раскручивал http-сервер. Когда я изменяю код, он либо
- вообще не реагирует на изменения
- реагирует, но вылетает, говоря, что не может найти исходный код (wut?)
Часть, которая будет сохранена
Это просто
import networkx as nx
G = nx.read_gpickle('big_file.gpickle')
G = nx.Graph(G)