如何用Python(django)将文件存储在内存中?

时间:2018-03-15 15:19:51

标签: python django python-3.x

我有这个代码: NNModel.py

select
(Select Count(*) as FiltersMainCount from FiltersMain where 
FilterMain_ID='555') as FiltersMainCount 
(Select Count(*) as FiltersSubCount from FiltersSub where 
FilterMain_ID='555') as FiltersSubCount   
(Select Count(*) as cmCount from cm where Cat_Main_ID='222') as cmCount
(Select Count(*) as FiltraCount from Filtra where FilterMain_ID='555') as 
FiltraCount 

当我使用这个函数时它加载我的文件,我想将它们加载到一些静态或单例?类?在第一次,然后访问该文件。我怎样才能在Python / django中实现这一点?

这个文件相当大,现在我相信每个请求都将它加载到内存中,这是无效的我猜...

1 个答案:

答案 0 :(得分:2)

听起来好像要缓存昂贵文件的负载,因此不需要在每个后续请求中重新加载。您可以使用Django的缓存框架来实现这一目标。

确保您拥有settings.py中指定的缓存配置。例如,如果您正在使用memcache:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
        'LOCATION': 'localhost:11211',
    }
}

然后在您的代码中,您可以在尝试加载之前询问缓存中的文件:

from django.core.cache import cache

def load_obj(name):
    with open('/home/user/' + name + '.pkl', 'rb') as f:
        return pickle.load(f)

def load_stuff():
    model = load_model("/home/user/model2.h5")

    voc = cache.get('my_files_cache_key')
    if voc is None:
        voc = load_obj('voc')
        cache.set('my_files_cache_key', voc, 600)

    return (model,voc)

以上示例将voc的值缓存10分钟(600秒)。

有关设置和使用Django缓存框架的更多详细信息,请参阅https://docs.djangoproject.com/en/2.0/topics/cache/