[英]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.