龙卷风的同步行为

时间:2012-06-19 23:40:43

标签: python asynchronous tornado

在龙卷风框架中是否有办法同步设置回调。

例如

print word

self.twitter_request(path= "/search",
    access_token=self.current_user["access_token"],
    callback=self.test,q=word,rpp="100")

我的测试功能定义为

def test(self,response):
        print "Test"

在上面的请求中,我有一组2个单词正在查询twitter api。但是,上述请求同步运行。

我输出为

查询1

QUERY2

测试

测试

但是我想输出

查询1

测试

QUERY2

测试

任何想法如何调整上面的代码来实现我打算做的事情?

2 个答案:

答案 0 :(得分:1)

这会阻止龙卷风 - 它是单线程,单一进程。所以这样做是一个非常糟糕的主意。

但是,您可以简单地重构代码,以便在查询1 的回调中触发查询2

要做到这一点,不要使用嵌套回调使代码不易阅读,请查看tornado.gen

答案 1 :(得分:1)

如果您的目标是按顺序执行查询列表,那么您可以使用@gen.engine方法来执行处理程序(http://www.tornadoweb.org/documentation/gen.html)。然后你将构建你的代码:

 @gen.engine
 def doit(self):
     for word in LIST_OF_STUFF:
         print word

         response = yield gen.Task(self.twitter_request, 
                                   path= "/search",
                                   access_token=self.current_user["access_token"],
                                   q=word,rpp="100")

         # do something with response.