上下文 想象一下,你有一个标准的CherryPy hello word app:
def index(self):
return "Hello world!"
index.exposed = True
并且您希望进行一些后处理,即记录请求处理,或者只记录我们从特定IP调用的事实。你会做的可能是:
def index(self):
self.RunMyPostProcessing()
return "Hello world!"
index.exposed = True
但是,这会增加您的请求处理时间。 (顺便说一下。如果你想在每个函数上调用它,你可能会使用装饰器,甚至是一些更复杂的方法)。
问题: 有没有办法创建一个全局线程感知队列(缓冲区),每个请求可以写入需要记录的消息(事件),而一些魔术函数将抓住它并进行后处理?你知道这种事情的模式吗?
我敢打赌CherryPy支持这样的事情: - )
提前谢谢你......
答案 0 :(得分:7)
“全局线程感知队列”称为Queue.Queue。我刚刚在http://tools.cherrypy.org/wiki/BackgroundTaskQueue
添加了一个食谱答案 1 :(得分:2)
on_end_request custom tool可能就是您想要的。
答案 2 :(得分:2)
由于我正在寻找这个并且现在已经过时了,我发现提供正确的(2012年)答案很有用。只需在处理您的网址的函数的开头添加:
cherrypy.request.hooks.attach('on_end_request', mycallbackfunction)
文档中有更多关于钩子的信息,但对我来说并不是很清楚。