2009-08-21 36 views
4

語境: 試想一下,你有一個標準的CherryPy問候詞應用:如何在CherryPy中執行異步後處理?

def index(self): 
     return "Hello world!" 
    index.exposed = True 

,你會喜歡做一些後期處理,即記錄請求處理或只需登錄一個事實,即我們從所謂的特定的IP。你會怎麼做可能是:

def index(self): 
    self.RunMyPostProcessing() 
    return "Hello world!" 
index.exposed = True 

但是,這將增加您的請求處理時間。 (順便說一下,如果你想在每個函數中調用它,可能你會使用裝飾器,或者甚至更復雜的方法)。

問: 有沒有建立一個全球性的線程知道隊列(緩衝)到每個請求可以寫消息(事件)需要被記錄的方式,而一些神奇的功能會抓住它和後處理?你會知道這種事情的模式嗎?

我敢打賭,CherryPy的支持類似的東西:-)

預先感謝您...

回答

7

「環球線程隊列知道」被稱爲Queue.Queue。我只是在http://tools.cherrypy.org/wiki/BackgroundTaskQueue

+0

你在我心中(我的代碼)或閱讀什麼? ;-)) 太感謝你了,它正是那種解決方案,我一直在尋找。 – stic 2009-08-24 09:05:20

+0

謝謝你救了我兩天的工作! – xApple 2011-03-14 16:01:41

2

加入這個配方正如我一直在尋找這一點,它現在已經過時了,我認爲有必要提供正確的(2012ish)的答案。只需在該處理您的網址功能的開始補充一點:

cherrypy.request.hooks.attach('on_end_request', mycallbackfunction) 

還有更多的相關信息的文檔中的鉤子,但它不是很清晰。