在 Tornado 中,协程(coroutine)是通过使用 tornado.gen 模块实现的。协程提供了一种异步编程的方式,可以方便地处理并发和异步任务。下面是一个基于生成器的协程的简单示例:
import tornado.ioloop
import tornado.web
import tornado.gen

class MyHandler(tornado.web.RequestHandler):
    @tornado.gen.coroutine
    def get(self):
        result = yield self.async_task()
        self.write(f"Result from async task: {result}")

    @tornado.gen.coroutine
    def async_task(self):
        # 模拟一个异步任务,例如数据库查询、HTTP 请求等
        yield tornado.gen.sleep(2)  # 模拟耗时操作
        raise tornado.gen.Return("Task completed")

if __name__ == "__main__":
    app = tornado.web.Application([
        (r"/", MyHandler),
    ])
    app.listen(8888)
    print("Server is running on http://localhost:8888")
    tornado.ioloop.IOLoop.current().start()

在这个示例中,MyHandler 类继承自 tornado.web.RequestHandler,并定义了一个名为 async_task 的协程方法。在 get 方法中,通过 yield 关键字调用了这个协程方法,并使用 tornado.gen.Return 返回了协程的结果。

tornado.gen.sleep 是一个协程工具,用于模拟异步任务中的耗时操作。实际情况下,你可以在 async_task 方法中进行数据库查询、HTTP 请求等异步操作。

值得注意的是,Tornado 6.0 之后,不再需要使用 tornado.gen.Return,可以直接使用 return 关键字返回结果。

这只是一个简单的示例,Tornado 中的协程提供了更强大的异步编程工具,包括异步的 HTTP 请求、异步的数据库查询等。你可以根据具体需求,结合 Tornado 提供的协程工具,编写更为复杂的异步代码。


转载请注明出处:http://www.zyzy.cn/article/detail/7441/Tornado