从子线程访问 CherryPy 会话?

Access CherryPy session from child thread?

在 CherryPy 中,每个请求 运行 都在一个线程中,并且该线程可以通过 cherrypy.session 访问会话对象。如果从该请求线程启动另一个线程,从而允许对 return 的请求,您将无法再访问该会话对象。有什么解决办法吗?

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

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

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