Python Tornado AsynchtpClient获取回调:额外参数?
我对整个异步游戏有点陌生(大部分是Django的家伙),但我想知道:如何将额外的参数传递给Tornado的AsyncHTTPClient.fetch回调?例如,我正在跟踪调用回调的次数(以便在处理数据之前等待执行某个数字),我想做如下操作:Python Tornado AsynchtpClient获取回调:额外参数?,python,asynchronous,tornado,Python,Asynchronous,Tornado,我对整个异步游戏有点陌生(大部分是Django的家伙),但我想知道:如何将额外的参数传递给Tornado的AsyncHTTPClient.fetch回调?例如,我正在跟踪调用回调的次数(以便在处理数据之前等待执行某个数字),我想做如下操作: def getPage(self, items,iteration): http = AsyncHTTPClient() http.fetch(feed, callback=self.resp(items,iteration)) de
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()
您需要“绑定”其他参数。
使用functools.partial,如下所示:
items = ..
iteration = ..
cb = functools.partial(self.resp, items, iteration)
cb = lambda : self.resp(items, iteration)
或者你可以用lambda,像这样:
items = ..
iteration = ..
cb = functools.partial(self.resp, items, iteration)
cb = lambda : self.resp(items, iteration)
(您可能需要将签名添加到DEF RESP(自、项目、迭代、响应):)
如果您在Reqththand中调用FETCH,您也可以考虑装饰器。在这种情况下,您无需向回调添加额外的参数,因为您的结果与要获取的调用在同一范围内可见。
为什么需要跟踪回调调用的次数?谢谢!这真是太棒了,这正是我想要的,但我在没有异步的情况下重写了这个程序,因为我意识到这对于我正在做的事情(在RSS提要上聚合数据)来说是不必要的。不过,我相信我还会用这个!我正在考虑一个闭包,但这似乎是一个更干净的方法。请注意:我发现functools.partial(self.resp,items,iteration)
方法需要response
作为回调签名中的最后一个参数。e、 g.def resp(self、items、items、iteration、response):
@MechEthan您始终可以通过def resp(*args)检查参数的位置:打印args
他说:"虽然这个连结可以回答问题,但最好在这里加入答案的主要部分,并提供连结供参考。如果链接页面发生更改,仅链接的答案可能会无效。”