2010-08-28 35 views
0

我正在使用CherryPy爲SymPy製作一個基於Web的前端,它使用服務器端的異步流程庫來允許一次處理多個請求,而無需等待每個請求完成。爲了使前端能夠按預期運行,我在每個會話的整個過程中使用一個流程。當用戶提交一個請求時,客戶端Javascript將cookie的session-id發送到服務器,而服務器端當前使用一對列表,將控制器類的實例存儲在一個列表中,並將相應的會話標識存儲在另一種方法是創建一個新的解釋器代理,並在提交不存在的會話標識時發送輸入。唯一的問題是代理類在相應會話到期時不會被刪除。此外,我看不到任何東西來檢索當前請求所服務的會話標識。將任意Python對象綁定到CherryPy會話

我關於這一切的問題是:有什麼辦法可以將任意對象「連接」到CherryPy會話,以便在會話過期時將其刪除,有沒有我在此忽略的東西可以大大簡化事情, CherryPy的多線程化否定了從子進程同步讀取stdout文件句柄的問題?

回答

1

您可以創建自己的會話類型,從CherryPy的基本會話派生。使用它的clean_up方法來進行清理。

查看cherrypy/lib/sessions.py瞭解詳細信息和示例會話實現。

+0

非常感謝!但有兩個問題:我如何讓CherryPy使用新的會話對象,並且我注意到在基礎Session類中沒有定義'__del__'方法,因此我需要定期檢查過期會話,如果有,我怎麼做? – mmirate 2010-08-28 16:17:54

+1

讓CherryPy使用它非常難看;您在'cheryrpy.lib.sessions'中粘貼對自定義會話類的引用,然後在config中使用相同的名稱(不帶'Session'後綴)。例如,如果您創建了一個MyCustomSession類,請編寫「從cherrypy.lib導入會話」,然後「類MyCustomSession(sessions.FileSession):...」,然後「sessions.MyCustomSession = MyCustomSession」,然後在config:「tools.sessions .storage_type ='mycustom'「 – fumanchu 2010-08-28 18:56:12