2011-05-24 18 views
17

我對這整個異步遊戲(主要是Django人)有點新鮮,但我想知道:我如何將額外的參數傳遞給Tornado的AsyncHTTPClient.fetch回調?例如,我要跟蹤的次回調已經撥打的號碼(爲了等到一定數量的對數據的工作之前執行),我想這樣做:Tornado AsyncHTTPClient獲取回調:額外的參數?

def getPage(self, items,iteration): 
    http = AsyncHTTPClient()  
    http.fetch(feed, callback=self.resp(items,iteration)) 
def resp(self, response, items, iteration): 
    #do stuff 
    self.finish() 
+0

爲什麼你需要跟蹤回調被調用的次數? – jsalonen 2011-05-25 08:00:50

回答

22

您需要「綁定」您的其他參數。 使用functools.partial,像這樣:

items = .. 
iteration = .. 
cb = functools.partial(self.resp, items, iteration) 

或者你可以使用拉姆達,像這樣:

cb = lambda : self.resp(items, iteration) 

(你可能需要將簽名添加到高清RESP(個體經營,項目,迭代,響應):)

+1

謝謝!這真棒,正是我在尋找的東西,但我沒有異步地重寫了程序,因爲我意識到這不是我需要做的事情(彙總RSS提要上的數據)。不過,我相信我會再次使用它! – 2011-05-31 03:50:54

+1

+1,部分是要走的路。 – waldecir 2011-09-21 00:55:20

+1

我正在考慮關閉,但這似乎是更乾淨的方式。 – vartec 2012-11-26 16:32:33

0

如果您從RequestHandler中調用獲取,您可能還會考慮裝飾器gen.coroutine。在這種情況下,您不必爲回調添加額外的參數,因爲您可以在與獲取調用相同的範圍內看到結果。

+2

「雖然這個鏈接可能回答這個問題,但它更好將答案的重要部分包括在內,並提供參考鏈接,如果鏈接頁面發生變化,則僅鏈接答案可能會失效。「 – zero323 2013-11-04 11:57:23