2013-09-13 2 views
0

Я пишу API, который возвращает json в соответствии с запросами. Например: localhost/api/query?a=1&b=2. Чтобы вернуть json, мне нужно сделать некоторые предварительные вычисления для вычисления значения, скажем, x. Предварительный расчет занимает много времени (несколько сотен миллисекунд). Например, файл json возвращает значение x+a+b. Когда запрос пользователя localhost/api/query?a=3&b=4, x будет высчитываться снова, и это пустая трата времени с x не изменится для каких-либо запросов. Вопрос в том, как я могу сделать этот предварительный расчет x для всех запросов (В реальном приложении x не является значением, а сложным объектом, возвращаемым завернутым кодом C++).Как избежать повторных предварительных вычислений в представлении django

ответ

2

Если вы используете какой-то кеш (memcached, redis), вы можете его сохранить там. Вы можете попытаться сериализовать объект с помощью pickle, msgpack и т. Д. Это можно восстановить и отменить.

+0

Я пробовал мариновать. Для простых объектов python это нормально, чтобы сериализовать его, а затем извлечь его путем десериализации. Тем не менее, объект - это класс C++, завернутый boost_python. В нем указано, что трассировка экземпляров «libNetwork.Network» не включена (http://www.boost.org/libs/python/doc/v2/pickle.html) – tonny2v

+0

Я не знаю, какой сервер вы используете, но он Кажется, что этот объект должен быть создан один раз в процессе/потоке/независимо (помещать его в отдельный модуль, где вы его инициализируете) и разделяете между вызовами, но имейте в виду, что объект должен быть потокобезопасным. Если сервер основан на процессах (у нескольких рабочих - вроде пушки, каждый процесс и, возможно, каждый поток должен иметь свой собственный объект). Без деталей об объекте и о том, как он работает, мы мало можем вам помочь (извините) ... – hitripekac

1

Вы можете добавить модель (с таблицей db), которая хранит значения для a, b и x. Затем для каждого запроса вы можете искать экземпляр с a и b и возвращать связанный x.

+0

Спасибо. Но, кажется, сложно хранить обернутый объект в таблице данных, по крайней мере, я не знаю, как ... – tonny2v

+0

Если это json-объект, вы можете сделать дампы (дамп в виде строки) в TextField в своих моделях/дб. – jcfollower

Смежные вопросы