先把可运行代码列出来, 注释和说明后续补充.
# -.- coding:utf-8 -.-
# __author__ = 'zt'
import tornado.ioloop
from tornado.concurrent import Future
from tornado.httpclient import AsyncHTTPClient
def async_fetch_future(url):
http_client = AsyncHTTPClient()
my_future = Future()
fetch_future = http_client.fetch(url)
fetch_future.add_done_callback(lambda f: my_future.set_result(f.result()))
return my_future
def main():
return async_fetch_future('http://www.qq.com').running()
if __name__ == '__main__':
response = tornado.ioloop.IOLoop.instance().run_sync(main)
print response.body
# -.- coding:utf-8 -.-
# __author__ = 'zt'
import json
import tornado.ioloop
from tornado.httpclient import AsyncHTTPClient
from tornado.concurrent import Future
def futrue_callback(res_future):
print("调用回调函数 Futrue")
s = res_future.result().body.decode('gbk')
print(s)
def async_fetch_future(url):
"""
异步请求,使用Future类
:param url:
:return:
"""
http_client = AsyncHTTPClient()
my_future = Future()
fetch_future = http_client.fetch(url)
fetch_future.add_done_callback(
# Future的result默认为HttpResponce
lambda f: my_future.set_result(f.result()))
return my_future
if __name__ == '__main__':
# 异步请求,返回Futrue类
s = async_fetch_future("http://www.qq.com")
io_loop = tornado.ioloop.IOLoop.current()
io_loop.add_future(s, callback=futrue_callback)
io_loop.start()
参考: <http://www.tornadoweb.org/en/stable/guide/async.html#examples>
参考: <http://www.cnphp6.com/archives/85012>