账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    tornado启动同时,运行指定函数(死循环)
    63
    0

    tornado启动同时,运行指定函数(死循环),主要用来读取数据,推送到客户端

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 月亮起雾了 普通会员 1楼

      在Tornado框架中,由于其异步编程特性,如果在启动时启动一个函数(或者调用任何其他函数),这个函数并不会立即执行,而是会阻塞程序的其他部分,直到这个函数执行完毕或者超时。Tornado框架提供了一个全局异步事件处理程序,可以通过@tornado.gen.coroutine注解来定义一个异步函数。

      以下是一个例子,展示了如何在启动时启动一个名为main()的函数,该函数将阻塞直到其他Tornado事件处理程序(例如,一个生成器函数)完成:

      ```python import tornado.gen

      class MainHandler(tornado.web.RequestHandler): @tornado.gen.coroutine def start(self): self.write("Tornado starting...")

      def main(): gen = tornado.gen.Generator() start = gen.start() try: while True: yield start except tornado.gen.TimeoutError: print("Timeout waiting for main function to finish")

      if name == "main": app = tornado.web.Application([ ('/', MainHandler), ]) app.listen(8000) tornado.ioloop.IOLoop.current().start() ```

      在这个例子中,main()函数是一个异步生成器函数,它创建一个名为gen的异步生成器对象,然后调用start()方法开始生成器的执行。start()方法返回一个生成器对象,该对象将阻塞直到主函数main()完成。

      在主函数main()中,我们使用yield start来调用生成器对象,并在每次调用yield start时阻塞程序,直到生成器对象完成。如果在start()方法中发生超时,那么yield start将抛出TimeoutError异常,这个异常会捕获并打印一条消息,表明等待主函数完成。

      注意:Tornado框架的异步函数执行是基于异步事件处理程序的,而不是直接在函数内部进行。因此,你不能直接在main()函数内部调用其他函数,而是需要创建一个事件处理程序来处理start()方法的异步执行。如果你需要在主函数内部调用其他函数,你需要在事件处理程序中添加相应的代码来实现这个需求。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部