【问题标题】:Access CherryPy session from child thread?从子线程访问 CherryPy 会话?
【发布时间】:2016-07-02 19:45:26
【问题描述】:

在 CherryPy 中,每个请求都在一个线程中运行,并且该线程可以通过cherrypy.session 访问会话对象。如果您从该请求线程启动另一个线程,从而允许请求返回,则您不再有权访问该会话对象。有没有办法解决这个问题?

我有一个在用户加载特定页面时运行的函数。在某些情况下,此功能可能需要一些时间(例如 10 秒左右)才能运行。此函数的结果不直接用于页面渲染,而是存储在用户会话对象中,以供用户单击按钮时(即时)检索。我不想让用户等待数据被编译,我想将此函数卸载到后台线程并让主线程将页面返回给用户,但是当我这样做时,我不再有权访问用户会话对象来存储结果。我该如何解决这个问题?谢谢。

【问题讨论】:

    标签: multithreading session cherrypy


    【解决方案1】:

    在我的具体情况下,我为我的会话使用了一个自定义类(一个 PostgreSQL 会话类),但我认为无论如何都将适用相同的过程。当初始请求进来时,我从cherrypy.request.cookie 对象中提取session_id,并将其传递给我在子线程中运行的函数。

    然后,在该函数中,当我需要访问会话对象时,我自己使用session_id 实例化一个新的会话对象,并在设置所需的值后调用实例上的save()。非常适合我!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多