Tornado AsyncHTTPClient fetch 回调:额外参数?

17 投票
2 回答
4345 浏览
提问于 2025-04-16 18:16

我对异步编程还不是很熟悉(之前主要用Django),但我想知道:我怎么能把额外的参数传递给Tornado的AsyncHTTPClient.fetch回调函数呢?举个例子,我在记录回调被调用的次数(为了等到达到一定次数后再处理数据),我想做类似这样的事情:

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()

2 个回答

0

如果你在一个请求处理器(RequestHandler)里面调用 fetch,可能还可以考虑使用 gen.coroutine 这个装饰器。在这种情况下,你就不需要给回调函数添加额外的参数,因为你可以在调用 fetch 的同一个范围内看到结果。

22

你需要“绑定”你额外的参数。可以使用functools.partial,像这样:

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

或者你也可以用lambda,像这样:

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

(你可能需要在def resp(self, items, iteration, response):中添加签名)

撰写回答