2011-03-11 71 views

回答

-1

不,它不容易“开箱即用”。你所指的是“火和忘记”。即使你使用一个线程池去寻找请求,该线程池也将属于属于Tornado的主python进程。

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

+0

这是非常容易的;我会添加一个答案。 –

5

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

0

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

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

要小心,您关闭所有的数据库连接(在催生代码),做当它正常完成无子的请求任何其他龙卷风可能会做。其他答案听起来更好。但是,你可以做到这一点。不要这样做。

9

这是非常简单的:

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

这会阻止io循环吗? – raylu

+2

是的,如果foo()阻止IO。不,如果foo()没有。 经验法则:如果foo()使用IOStream,那么它是非阻塞的。如果它使用没有IOStream的套接字,那么它将被阻塞。 –

相关问题