【问题标题】:Bind arbitrary Python objects to CherryPy sessions将任意 Python 对象绑定到 CherryPy 会话
【发布时间】:2010-08-28 22:57:21
【问题描述】:

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

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

【问题讨论】:

    标签: python multithreading session cherrypy asynchronous


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢!不过有两个问题:我如何让 CherryPy 使用新的会话对象,并且我注意到基础 Session 类上没有定义 __del__ 方法,所以我需要定期检查过期的会话,如果是,我该怎么做?
    • 让 CherryPy 使用它非常难看;您在cheryrpy.lib.sessions 中引用您的自定义会话类,然后在配置中使用相同的名称(不带“会话”后缀)。例如,如果您创建了一个 MyCustomSession 类,请在 config: "tools.sessions .storage_type = 'mycustom'"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多