龙卷风:没有制作异步请求

时间:2017-04-10 07:07:54

标签: python python-3.x tornado

我是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)

当我运行此程序时,没有打印任何内容:(

程序刚刚运行并退出。 我做错了什么?

2 个答案:

答案 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>