[英]How to execute asynchronous post-processing in CherryPy?
上下文:假設您有一個標准的 CherryPy hello word 應用程序:
def index(self):
return "Hello world!"
index.exposed = True
並且您想進行一些后處理,即記錄請求處理或僅記錄我們從特定 IP 調用的事實。 你可能會做的是:
def index(self):
self.RunMyPostProcessing()
return "Hello world!"
index.exposed = True
但是,這會增加您的請求處理時間。 (順便說一句。如果你想在每個函數上調用它,你可能會使用裝飾器,或者甚至一些更復雜的方法)。
問題:有沒有辦法創建一個全局線程感知隊列(緩沖區),每個請求都可以向其中寫入需要記錄的消息(事件),而一些魔法函數會抓取它並進行后處理? 你知道這種事情的模式嗎?
我敢打賭 CherryPy 支持類似的東西 :-)
先感謝您...
“全局線程感知隊列”稱為 Queue.Queue。
on_end_request自定義工具可能就是您想要的。
當我正在尋找這個並且它現在已經過時,我發現提供正確的(2012ish)答案很有用。 只需在處理您的 url 的函數的開頭添加它:
cherrypy.request.hooks.attach('on_end_request', mycallbackfunction)
文檔中有更多關於鈎子的信息,但我不太清楚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.