2010-08-28 63 views
0

我正在使用CherryPy为SymPy制作一个基于Web的前端,它使用服务器端的异步流程库来允许一次处理多个请求,而无需等待每个请求完成。为了使前端能够按预期运行,我在每个会话的整个过程中使用一个流程。当用户提交一个请求时,客户端Javascript将cookie的session-id发送到服务器,而服务器端当前使用一对列表,将控制器类的实例存储在一个列表中,并将相应的会话标识存储在另一种方法是创建一个新的解释器代理,并在提交不存在的会话标识时发送输入。唯一的问题是代理类在相应会话到期时不会被删除。此外,我看不到任何东西来检索当前请求所服务的会话标识。将任意Python对象绑定到CherryPy会话

我关于这一切的问题是:有什么办法可以将任意对象“连接”到CherryPy会话,以便在会话过期时将其删除,有没有我在此忽略的东西可以大大简化事情, CherryPy的多线程化否定了从子进程同步读取stdout文件句柄的问题?

回答

1

您可以创建自己的会话类型,从CherryPy的基本会话派生。使用它的clean_up方法来进行清理。

查看cherrypy/lib/sessions.py了解详细信息和示例会话实现。

+0

非常感谢!但有两个问题:我如何让CherryPy使用新的会话对象,并且我注意到在基础Session类中没有定义'__del__'方法,因此我需要定期检查过期会话,如果有,我怎么做? – mmirate 2010-08-28 16:17:54

+1

让CherryPy使用它非常难看;您在'cheryrpy.lib.sessions'中粘贴对自定义会话类的引用,然后在config中使用相同的名称(不带'Session'后缀)。例如,如果您创建了一个MyCustomSession类,请编写“从cherrypy.lib导入会话”,然后“类MyCustomSession(sessions.FileSession):...”,然后“sessions.MyCustomSession = MyCustomSession”,然后在config:“tools.sessions .storage_type ='mycustom'“ – fumanchu 2010-08-28 18:56:12