我对龙卷风有一个概念上的怀疑。
我有一个查询列表,我正在针对twitter api运行。
所以我有类似
的东西while (keywords):
if (requests.remaining > 300) :
self.twitter_request(path= "/search",access_token=self.current_user["access_token"],
callback=(yield gen.Callback("key")),q=word)
response = yield gen.Wait("key")
self.parse_response(response)
else:
sleep(3000)
parse_response定义为
def parse_response(self,response):
//parse the response object
//check if number of results returned is 100. If yes then, check current page number.
//if less than 4 then
self.twitter_request(path= "/search",access_token=self.current_user["access_token"],
callback=self.async_callback(self._parse_response,fileIter= fileIter,fileType= fileType, query= query),q=query,rpp="100")
return
所以基本上我的parse_response函数正在解析响应并请求相同关键字的更多页面,直到page_number为4。
但是在调用这个辅助函数的主循环中,当我调用time.sleep(3000)时会被挂起。这甚至会使后台函数睡眠,因为主线程处于休眠状态,并且一旦这个主线程处于活动状态,它们就会恢复。 (因为我最初请求关键字,而parse_Response正在使用async_Callback,所以当执行sleep(3000)命令时,不会执行这些异步回调)。有没有办法允许后台处理运行,即使主类发出睡眠命令。
答案 0 :(得分:1)
为自己打开龙卷风定期回调。你会得到这样的东西。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tornado.web
import tornado.httpserver
import tornado.ioloop
KEYWORDS = []
class MyApplication(tornado.web.Application):
def period_run(self):
while(KEYWORDS):
if (requests.remaining > 300) :
self.twitter_request(path="/search",access_token=self.current_user["access_token"],
callback=(yield gen.Callback("key")),q=word)
response = yield gen.Wait("key")
self.parse_response(response)
app = MyApplication(handlers=urls, **settings)
http_server = tornado.httpserver.HTTPServer(app, xheaders=True)
loop = tornado.ioloop.IOLoop.instance()
TIME_TO_RUN = 400
period_cbk = tornado.ioloop.PeriodicCallback(app.period_run, 3000 + TIME_TO_RUN, loop)
period_cbk.start()
loop.start()
可以找到更多信息here。