Django只加载一次对象实例,让它们可用于启动app

时间:2014-04-21 15:25:27

标签: python django

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

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

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

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

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

非常感谢你。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

对于本地开发,测试目的和易于部署,您始终可以回退到将这些对象加载到项目设置中。

答案 2 :(得分:0)

你可以使用Redis。 python client效果很好,甚至可以使用rom,这对于建模数据似乎很不错。免责声明:我之前使用过Redis,但我从未使用过rom,我刚刚在几天前发现它,我认为值得分享它。

祝你好运!