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.pingtaimeng.com/article/detail/7441/Tornado