在Tornado中定义一个函数

时间:2013-03-27 12:14:19

标签: python tornado

大家好我在龙卷风中有这个主要内容:

def main():
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(Application())
    http_server.listen(options.port)
    periodic = tornado.ioloop.PeriodicCallback(check_commands_response, 5000)
    periodic.start()
    tornado.ioloop.IOLoop.instance().start()

现在,你怎么看,我已经把一个调用函数的周期函数放在主函数中。

在这个函数中,我会使用一些函数方法进入某些类....所以我不能把这个check_commands_response放在类之外。但是我不能把这个函数放到类中(它是一个BaseHandler)因为当main启动时函数还没有被定义...

我该怎么办?

修改

如果我写这个有什么问题:

class CheckCommandResponse(BaseHandler):
    @tornado.web.authenticated
    @tornado.web.asynchronous
    @tornado.gen.engine

    @staticmethod
    def check_commands_response(self):
        self.lock_tables("read", ['networks'])
        nets = self.db.query("SELECT DISTINCT netid from networks")
        self.unlock_tables

        for net in nets:
            got_commands_response(net)

    @staticmethod
    def got_commands_response(netid):
        como_url = "".join("http://xx.xx.xx.xx:44444/ztc_config?netid=" \
                   + netid + "&opcode_group=0&opcode=0&start=-10s&end=-1s")

        http_client = AsyncHTTPClient()
        #asynchronous alternative to time.sleep
        yield tornado.gen.Task(tornado.ioloop.IOLoop.instance().add_timeout, time.time() + 5)
        response = yield tornado.gen.Task(http_client.fetch, como_url)

        print response




################################################################################
# Application Entry Point
################################################################################
def main():
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(Application())
    http_server.listen(options.port)
    periodic = tornado.ioloop.PeriodicCallback(CheckCommandResponse.check_commands_response, 5000)
    periodic.start()
    tornado.ioloop.IOLoop.instance().start()

0 个答案:

没有答案