如何在CherryPy中执行异步后处理?
背景:想象一下,你有一个标准的 CherryPy “你好,世界” 应用:
def index(self):
return "Hello world!"
index.exposed = True
现在你想做一些后续处理,比如记录请求的处理过程,或者仅仅是记录一下我们是从哪个特定的 IP 被调用的。你可能会这样做:
def index(self):
self.RunMyPostProcessing()
return "Hello world!"
index.exposed = True
不过,这样做会增加你的请求处理时间。(顺便说一下,如果你想在每个函数上都调用它,可能还会用到装饰器,或者一些更复杂的方法)。
问题:有没有办法创建一个全局的、支持多线程的队列(缓冲区),让每个请求都能写入需要记录的消息(事件),然后有一个神奇的函数去抓取这些消息并进行后续处理?你知道这样的模式吗?
我敢打赌 CherryPy 支持这样的功能 :-)
提前谢谢你...
2 个回答
2
我在寻找这个问题的答案时发现它已经过时了,所以我觉得有必要提供一个正确的答案(大约是2012年的)。只需在处理你网址的函数开头加上这一行:
cherrypy.request.hooks.attach('on_end_request', mycallbackfunction)
文档中有关于钩子的更多信息,但我觉得不是很清楚。
7
“全局线程感知队列”叫做 Queue.Queue。