通过会话密钥访问请求之间的pandas数据帧对象

时间:2015-03-06 14:59:59

标签: django pandas memcached django-rest-framework web-architecture

我有一个pandas数据框,周围有一个松散的包装类,为我的django / DRF应用程序提供元数据。该应用程序基本上是一种用户友好(非程序员)方式来进行一些数据分析和验证。在请求之间,我希望能够保存数据帧的状态,这样我就可以与数据进行一系列交互,但不需要将其保存在数据库中(只需要与浏览器会话一起存活)。从中可以看出django的会话框架是合乎逻辑的,但是从我所听到的会话数据应该是轻量级的,而dataframe对象不是json序列化的。

因为我没有大量用户,而且我希望应用程序感觉像桌面网站,所以我想使用django缓存作为将数据框对象保留在内存中的一种方法。因此,将数据放入缓存将类似于此

>>> from django.core.cache import caches
>>> cache1 = caches['default']
>>> cache1.set(request.session._get_session_key, dataframe_object)

然后相同,除了使用get访问以下请求。 这是处理这个工作流程的好方法还是我应该使用另一个系统来保存内存中相当大的数据(5mb到100mb)?

1 个答案:

答案 0 :(得分:2)

如果您在现代服务器上运行应用程序,那么100mb并不是一个巨大的内存。但是,如果您有多个并发用户,每个用户需要100mb的缓存,那么这可能会增加比您的服务器可以处理的内存更多的内存。您的缓存和服务器应该配置得恰当,您可能希望限制python代码中缓存数据帧的总数。

由于看起来Django确实需要序列化会话数据,您可以选择使用与PickleSerializer的会话或使用缓存。根据文档,出于安全原因不建议使用PickleSerializer,因此您选择使用缓存是一个很好的选择。

Django中的默认缓存后端不会跨进程共享条目,因此您可以通过安装memcached并启用memcached.MemcachedCache后端来获得更好的内存和时间效率。