2017-04-10 141 views
0

我是一個新手,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()。然後,您將在handle_response中撥打IOLoop.current().stop(),假設您只需要這一個請求。

另一種方式來啓動和停止IOLoop單個功能是這樣的:response = IOLoop.current().run_sync(functools.partial(http_client.fetch, url))(然後你事後處理響應)

+0

這聽起來不錯,但我收到此錯誤:NameError:名稱'龍捲風'未定義 – etayluz

+0

關於第二種方法,我正在尋找一種異步方法。我是從node.js進入Python的 - 這似乎是一種非常不同的思維和編碼方式。 – etayluz

+0

看起來像這是必要的:import tornado.ioloop – etayluz

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> 
+0

謝謝,但它不是我正在尋找 – etayluz