Tornado AsyncHTTPClient fetch 回调:额外参数?
我对异步编程还不是很熟悉(之前主要用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):中添加签名)