You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CherryPy中实现响应返回后执行回调函数?

在CherryPy中实现响应返回后调用函数的方案

没问题~我来帮你把这个逻辑在CherryPy里实现出来,和你原来的Tornado代码效果完全一致。

CherryPy提供了很直接的方式来实现“响应发送给客户端后执行特定函数”的需求,核心是利用cherrypy.response.callbacks这个回调列表——列表里的函数会在响应完全发送完毕后被触发执行,和你在Tornado里调用self.finish()后执行func()的逻辑对齐。

对应示例代码

def func():
    print("hello")

import cherrypy

class Root:
    @cherrypy.expose
    def index(self):
        # 准备要返回的响应内容
        response_content = "Hello, world"
        # 将func添加到响应回调,确保响应发送后再执行
        cherrypy.response.callbacks.append(func)
        # 返回响应
        return response_content

if __name__ == "__main__":
    # 启动CherryPy应用,默认监听8080端口(如需改端口可加port参数,比如cherrypy.quickstart(Root(), port=8888))
    cherrypy.quickstart(Root())

额外补充:全局请求后回调

如果你需要给所有请求都添加后置执行的函数,可以用CherryPy的Tool工具结合on_end_request钩子,示例如下:

def global_post_request_func():
    print("所有请求完成后都会执行我")

# 定义一个全局的后置请求工具
cherrypy.tools.post_request_hook = cherrypy.Tool('on_end_request', global_post_request_func)

class Root:
    @cherrypy.expose
    @cherrypy.tools.post_request_hook()
    def index(self):
        return "Hello, world"
    
    @cherrypy.expose
    @cherrypy.tools.post_request_hook()
    def another_page(self):
        return "Another page content"

if __name__ == "__main__":
    cherrypy.quickstart(Root())

这样不管访问哪个路由,响应发送后都会执行global_post_request_func。

内容的提问来源于stack exchange,提问作者DevanshBheda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:56:19