Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django只加载一次对象实例,让它们在启动应用程序时可用_Python_Django - Fatal编程技术网

Python Django只加载一次对象实例,让它们在启动应用程序时可用

Python Django只加载一次对象实例,让它们在启动应用程序时可用,python,django,Python,Django,我有一个应用程序(Django 1.6),它使用了大约4000个对象,用于以前生成的自然语言处理(NLP) 所有应用程序进程(请求、测试、自定义管理命令等)都需要以某种方式使用所有这些对象 我想做的是在启动时(大约)加载所有这些对象一次,并将它们存储在内存中,使它们可用于所有应用程序进程 这有一些线索,但我很想听听你对处理这种情况的最佳方法的想法 澄清:4000个对象仅用于在所有过程中读取,它们不会以任何方式被修改到应用程序中 非常感谢。在这种情况下,最好的办法可能就是为这些东西启动一个专门的流

我有一个应用程序(Django 1.6),它使用了大约4000个对象,用于以前生成的自然语言处理(NLP)

所有应用程序进程(请求、测试、自定义管理命令等)都需要以某种方式使用所有这些对象

我想做的是在启动时(大约)加载所有这些对象一次,并将它们存储在内存中,使它们可用于所有应用程序进程

这有一些线索,但我很想听听你对处理这种情况的最佳方法的想法

澄清:4000个对象仅用于在所有过程中读取,它们不会以任何方式被修改到应用程序中


非常感谢。

在这种情况下,最好的办法可能就是为这些东西启动一个专门的流程。任何其他方式,您的对象都不能保证在部署集群中是单个的

如果您使用单独的进程工作者进行部署,那么您将拥有多个不同的NLP数据副本(每个进程一个),如果您使用协作线程(例如使用gunicorn gevent工作者)进行部署,那么您必须确保您的代码是线程安全的

我会将其设置为在专用进程上运行的外部服务,并让每个客户机使用您选择的进程内通信(套接字、HTTP等)访问此服务


为了便于本地开发、测试和部署,您可以随时将这些对象加载到项目设置中。

您可能希望将所有数据放入,并利用Memcached缓存后端。因此,您的任何进程都可以快速、安全、轻松地访问数据。

您可以使用Redis。这种方法工作得很好,也许你甚至可以使用它来为你的数据建模。免责声明:我以前使用过Redis,但我从未使用过rom,我几天前才发现它,我认为它值得分享


祝你好运

也许这些物体不需要变异。谢谢你的回答@yuval adam。在设置中加载对象正是我到目前为止为开发所做的事情。根据paul draper的评论,我对对象的使用做了澄清。我会稍微研究一下你将其作为外部服务的选择,但是,理想情况下,我希望将对象保留在应用程序中。这是一个很好的选择@isobolev。我去查一下。非常感谢。在这种情况下,缓存可能很棘手。如果这些是大型对象,那么每次从缓存反序列化它们可能是一项非常昂贵的操作。它甚至可能比每个进程在项目设置中只准备一个副本更糟糕。@YuvalAdam有一个很好的观点。测试此选项相对简单,因此我将与您分享它的行为。嘿@jcatalan,非常感谢您的建议。我的第一个选择是将对象放在同一个应用程序中,但是如果这不起作用,则绝对需要记住键值存储。顺便说一句:我不知道rom。