8

在龙卷风请求处理程序中,如果我必须调用不影响返回给用户的函数 foo(),则首先将结果返回给用户然后调用 foo() 是有意义的。是否可以在龙卷风(或使用某些第三方软件包)中轻松做到这一点?

4

4 回答 4

12

这非常容易:

class Handler(tornado.web.RequestHandler):
    def get(self):
        self.write('response')
        self.finish() # Connection is now closed
        foo()
于 2012-09-08T19:29:02.647 回答
5

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

于 2011-03-11T16:48:43.320 回答
0

坏建议警告:您可以使用多处理。

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

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

于 2011-04-22T15:51:08.393 回答
-2

不,开箱即用并不“容易”。你指的是“一劳永逸”。即使您使用线程池来分出请求,该线程池也将属于属于 Tornado 的主要 python 进程。

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

于 2011-03-24T10:21:10.177 回答