返回后请求处理程序中的龙卷风流程数据

时间:2011-03-11 15:21:19

标签: python tornado

在龙卷风请求处理程序中,如果我必须调用函数foo()而不影响返回给用户的内容,则首先将结果返回给用户然后调用foo()是有意义的。是否有可能在龙卷风中(或使用某些第三方包装)轻松完成此操作?

4 个答案:

答案 0 :(得分:10)

这非常容易:

class Handler(tornado.web.RequestHandler):
    def get(self):
        self.write('response')
        self.finish() # Connection is now closed
        foo()

答案 1 :(得分:5)

ioloop.add_callback,Tornado将在下一次IOLoop迭代中执行回调。

答案 2 :(得分:0)

糟糕的建议警告:您可以使用多处理。

http://docs.python.org/library/multiprocessing.html

请注意关闭所有数据库连接(在生成的代码中),并执行龙卷风在正常完成没有子进程的请求时可能执行的任何操作。其他答案听起来更好。但是,你可以做到这一点。不要这样做。

答案 3 :(得分:-1)

不,它不是“简单”的开箱即用。你所指的是“火与忘记”。即使您使用线程池来扩展请求,该线程池也将属于属于Tornado的主python进程。

最好的方法是消息队列。像胡萝卜一样的东西。这样,假设您有一个页面,用户可以执行该页面以开始生成巨大的报告,您可以在消息队列中启动它,然后完成Tornado请求,并使用一些AJAX魔术和其他技巧(在Tornado的范围之外),您可以坐下来等待消息队列完成它的工作(技术上可能发生在不同物理位置的分布式服务器上)。