Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tornado AsynchtpClient获取回调:额外参数?_Python_Asynchronous_Tornado - Fatal编程技术网

Python Tornado AsynchtpClient获取回调:额外参数?

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

我对整个异步游戏有点陌生(大部分是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()
您需要“绑定”其他参数。 使用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
他说:"虽然这个连结可以回答问题,但最好在这里加入答案的主要部分,并提供连结供参考。如果链接页面发生更改,仅链接的答案可能会无效。”