2015-12-30 17 views
0

Я работаю над хранением данных в кэш-памяти с использованием cherrypy. Я использую код ниже для ввода данных в кеш:Установить сеанс не истекать автоматически

import cherrypy 
import datetime 
import sys 
from cherrypy.lib.caching import MemoryCache 
cache = MemoryCache() 

def putDataIntoCache(self, *args, **kwargs): 
    data = cache.get() 
    if not data: 
     obj = kwargs 
     size = sys.getsizeof(obj) 
     cache.put(obj, size) 
     data = obj 
return 'obj: %s, id: %s' % (cache.get(), id(cache.get())) 

Но проблема в том, что данные кэша автоматически очищаются через 10 секунд. Я обнаружил, что delay = 600 установлен в cache.py классе. По этой причине данные очищаются через 10 секунд.

Я просто хочу очистить данные кэша при перезапуске сервера cherrypy.

Как решить эту проблему?

+0

Вы со ссылкой на 'CherryPy/Lib модуль/caching.py'? Как вы создаете объект 'cache', который вы используете в своем примере? – cyraxjoe

+0

@cyraxjoe Да, я использую модуль caching.py –

+0

Как вы его используете? Непосредственно как инструмент? Можете ли вы показать мне заявление, в котором вы создаете объект кеша. – cyraxjoe

ответ

0

Я думаю, что вы не должны использовать кеш напрямую. Специально, когда вы действительно не хотите иметь преимущество более тонкого контроля за недействительностью кеша.

Вы можете сделать что-то вроде этого:

import cherrypy as cp                                       
from cherrypy.process.plugins import SimplePlugin                                

class CachePlugin(SimplePlugin):                                      

    def start(self):                                        
     self.bus.log('Initializing cache')                                  
     cp.cache = {}                                       

    def stop(self):                                        
     self.bus.log('Clearing cache')                                   
     cp.cache = {}                                       

class Root:                                          

    @cp.expose                                         
    def default(self, user=None):                                    
     if user is not None:                                      
      cp.cache['user'] = user                                    
     return cp.cache.get('user', 'No user')                                 


CachePlugin(cp.engine).subscribe()                                      
cp.quickstart(Root()) 

Попробуйте его с: /, /?user=test, / и /?user=new_user

Вы могли содержать кэш на плагине и публиковать каналы, чтобы изменить его, но в общая идея заключается в том, что вам действительно не нужен инструмент кеша, просто чтобы слушать, когда сервер запускается и останавливается (я предполагаю, что вы используете автозагрузчик).

Это просто обезьяна-словарь, исправленная на черви-модуле. Это быстро и просто. В Мексике довольно поздно ... Надеюсь, это поможет.

Более подробная информация о плагинах: http://cherrypy.readthedocs.org/en/latest/extend.html#server-wide-functions

+0

У меня есть исключение отсюда «cp.cache ['user'] = пользователь« Неопределенная переменная из импорта: cache –

+0

@ShiladittyaChakraborty Как вы развертываете приложение? С самим CP-сервером? В начале журнала появляется фразу «Инициализация кеша»? – cyraxjoe

+0

Прямо сейчас я использую python в eclipse. Когда я использовал приведенный выше код в eclipse, я получил исключение, но странно, что программа работает с исключением. –

Смежные вопросы