开发者

Tornado AsyncHTTPClient fetch callback: Extra parameters?

开发者 https://www.devze.com 2023-03-08 15:37 出处:网络
I\'m sort of new to this whole async game (mostly been a Django guy), but I was wondering: how can I pass extra parameters to Tornado\'s AsyncHTTPClient.fetch callback? For example, I\'m tracking the

I'm sort of new to this whole async game (mostly been a Django guy), but I was wondering: how can I pass extra parameters to Tornado's AsyncHTTPClient.fetch callback? For example, I'm tracking the 开发者_JAVA百科number of times a callback has been called (in order to wait until a certain number have executed before working on the data), and I'd like to do something like:

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


You need to "bind" your additional arguments. Use functools.partial, like this:

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

or you could use lambda, like this:

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

(you probably need to add the signature to def resp(self, items, iteration, response):)


you might also consider the gen.coroutine decorator if you're calling fetch from inside a RequestHandler. in that case, you have no need to add extra parameters to the callback because you have the result visible in the same scope as the call to fetch.

0

精彩评论

暂无评论...
验证码 换一张
取 消