Python 如何在django视图中避免重复预计算

Python 如何在django视图中避免重复预计算,python,django,Python,Django,我正在编写一个API,它根据查询返回json。例如:localhost/api/query?a=1&b=2。要返回json,我需要做一些预计算来计算一个值,比如,x。预计算需要很长时间(几百毫秒)。例如,json文件返回x+a+b的值。 当用户查询localhost/api/query?a=3&b=4时,将再次计算x,这是浪费时间,因为x不会因任何查询而改变。问题是,如何对所有查询(C++中的代码)进行预计算(在实际应用程序中, x/code >不是一个值,而是一个复杂的C++包返回的对象)。

我正在编写一个API,它根据查询返回json。例如:
localhost/api/query?a=1&b=2
。要返回json,我需要做一些预计算来计算一个值,比如,
x
。预计算需要很长时间(几百毫秒)。例如,json文件返回
x+a+b的值。

当用户查询
localhost/api/query?a=3&b=4
时,将再次计算
x
,这是浪费时间,因为
x
不会因任何查询而改变。问题是,如何对所有查询(C++中的代码)进行预计算(在实际应用程序中, x/code >不是一个值,而是一个复杂的C++包返回的对象)。

如果您使用某种缓存(MeMcCache,ReDIS),您可以将它存储在那里。您可以尝试使用pickle、msgpack等序列化对象,您可以检索并反序列化该对象。

如果您使用某种缓存(memcached、redis),您可以将其存储在那里。您可以尝试使用pickle、msgpack等对对象进行序列化,您可以检索并反序列化该对象。

您可以添加一个存储a、b和x值的模型(带有db表)。然后,对于每个查询,您可以查找带有a和b的实例并返回关联的x。

您可以添加一个模型(带有db表),该模型存储a、b和x的值。然后,对于每个查询,您可以查找带有a和b的实例,并返回关联的x。

我尝试了pickle。对于简单的python对象,可以序列化它,然后通过反序列化获取它。但是,对象是由BooStyPython包装的C++类。它读到没有启用“libNetwork.Network”实例的pickle()我不知道您使用的是哪台服务器,但是似乎应该为每个进程/线程/任何东西创建一次这个对象(将它放在初始化它的单独模块中)并在调用之间共享,但请记住该对象应该是线程安全的。如果服务器是基于进程的(有几个worker,比如gunicorn,每个进程和每个线程都应该有自己的对象)。如果没有关于对象及其工作原理的详细信息,我们几乎无法帮助您(抱歉)…我尝试了pickle。对于简单的python对象,可以序列化它,然后通过反序列化获取它。但是,对象是由BooStyPython包装的C++类。它读到没有启用“libNetwork.Network”实例的pickle()我不知道您使用的是哪台服务器,但是似乎应该为每个进程/线程/任何东西创建一次这个对象(将它放在初始化它的单独模块中)并在调用之间共享,但请记住该对象应该是线程安全的。如果服务器是基于进程的(有几个worker,比如gunicorn,每个进程和每个线程都应该有自己的对象)。如果没有关于对象及其工作原理的详细信息,我们将无法为您提供帮助(抱歉)…谢谢。但似乎很难将包装好的对象存储到数据表中,至少我不知道如何…如果它是json对象,您可以将其转储(转储为字符串)到模型/db中的文本字段中。谢谢。但似乎很难将包装好的对象存储到数据表中,至少我不知道如何…如果它是json对象,您可以将其转储(转储为字符串)到models/db中的TextField。