从子线程访问CherryPy会话?

时间:2016-03-16 18:24:31

标签: multithreading session cherrypy

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

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

1 个答案:

答案 0 :(得分:0)

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

然后,在该函数中,当我需要访问会话对象时,我使用session_id自己实例化一个新的会话对象,并在实例上设置所需的值save()之后。对我来说很完美!