我是Tornado的新手,我正在尝试使用它来进行documentation中的异步调用:
from tornado.httpclient import AsyncHTTPClient
def handle_response(response):
"""Handles response"""
print 'here'
if response.error:
print "Error:", response.error
else:
print response.body
http_client = AsyncHTTPClient()
http_client.fetch("http://www.google.com/", handle_response)
当我运行此程序时,没有打印任何内容:(
程序刚刚运行并退出。 我做错了什么?
答案 0 :(得分:2)
你必须启动IOLoop才能运行异步内容。龙卷风计划的最后一行通常是tornado.ioloop.IOLoop.current().start()
。然后,您可以在IOLoop.current().stop()
中致电handle_response
,假设您只想做一个请求。
启动和停止单个函数的IOLoop的另一种方法是这样的:response = IOLoop.current().run_sync(functools.partial(http_client.fetch, url))
(之后你会处理响应)
答案 1 :(得分:1)
首先,请检查您是否通过python 3.4运行代码?
接下来请检查没有括号的打印声明。
由于我运行的代码几乎没有任何变化而且有效。
>>> def handle_response(response):
... if response.error:
... print("error: {}".format(response.error))
... else:
... print(response.body)
...
>>> http_client = AsyncHTTPClient()
>>> http_client.fetch("https://www.google.com",handle_response)
<tornado.concurrent.Future object at 0x03ADF570>