如何使用扭曲的python api将额外的参数传递给回调寄存器函数?

时间:2011-10-25 14:43:37

标签: python twisted

我使用扭曲的API有以下python代码。

def function(self,filename):    
    def results(result):
       //do something
    for i in range(int(numbers)) :
        name = something that has to do with the value of i         
        df = function_which_returns_a defer(name)
        df.addCallback(results)

它使用Twisted API。我想要实现的是将回调函数(结果)传递给每次迭代中构造的名称的值,而不改变functions_which_returns_a defer()函数的内容以及延迟对象。在functions_which_returns_a deffer的每个结果中,应该将名称的值传递给results()以对此做一些事情。即:在执行到达结果函数的第一次迭代时,我需要函数在i = 0时保持deffered对象的结果和name的值,然后当i = 1时,deferred对象将以值传递名称等等。所以我每次都需要使用名称变量alond和name变量调用defer对象的结果。当我尝试直接使用nameinside results()的值时,它始终保持最后一次迭代的值,这是理由,因为function_which_returns_a defer(name)没有返回。

1 个答案:

答案 0 :(得分:18)

您可以通过将这些参数传递给Deferred来将额外参数传递到Deferred.addCallback呼叫网站上的Deferred.addCallback回调:

def function(self,filename):    
    def results(result, name):
       # do something
    for i in range(int(numbers)) :
        name = something that has to do with the value of i         
        df = function_which_returns_a defer(name)
        df.addCallback(results, name)

您还可以按关键字传递参数:

        df.addCallback(results, name=name)

这样传递给addCallback(或addErrback)的所有参数都会传递给回调函数。