将任意Python对象绑定到CherryPy会话
我正在用CherryPy做一个基于网页的前端,目的是为了和SymPy配合使用。服务器端使用了一个异步处理库,这样可以同时处理多个请求,而不需要等每个请求完成后再处理下一个。为了让前端正常工作,我为每个会话使用一个进程。客户端的JavaScript会把会话ID从cookie中发送到服务器,当用户提交请求时,服务器端会用两个列表来存储控制器类的实例和对应的会话ID。如果提交的会话ID不存在,服务器就会创建一个新的解释器代理并发送输入。不过,现在的问题是,当会话过期时,这些代理类并没有被删除。此外,我也找不到任何方法来获取当前请求所服务的会话ID。
我对这些问题有几个疑问:有没有办法把一个任意对象“连接”到CherryPy的会话上,这样它在会话过期时就能被删除?有没有什么我忽略的地方,可以大大简化这个过程?还有,CherryPy的多线程是否能解决从子进程中同步读取stdout文件句柄的问题?
1 个回答
1
你可以创建自己的会话类型,这种类型是基于CherryPy的基础会话来的。你可以使用它的clean_up方法来进行清理工作。
想要了解更多细节和示例会话的实现,可以查看cherrypy/lib/sessions.py这个文件。