如何使用Twisted Python API向回调注册函数传递额外参数?

9
我有以下使用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。我想要实现的是在每次迭代中构造名称的值,同时不改变返回defer()函数的内容,并当然包括deferred对象。在functions_which_returns_a deffer的每个结果中,都应该将名称的值传递给results()以对其进行处理。例如:在第一次迭代时,当执行到results函数时,我需要函数保存延迟对象的结果以及i=0时名称的值,然后当i=1时,延迟对象将被传递给名称的值,依此类推。因此,每次调用defer对象时,我都需要传递名称变量的结果以及名称变量。当我尝试直接在results()中使用名称的值时,它总是保留最后一次迭代的值,这是合理的,因为function_which_returns_a defer(name)尚未返回。

对于一般情况,请参见callback - Python,如何将参数传递给函数指针参数?- Stack Overflow。在这种特定情况下(twisted库),下面的解决方案更好。 - user202729
1个回答

20

您可以通过在 Deferred.addCallback 调用时将这些参数直接传递给 Deferred.addCallback,向 Deferred 回调函数传递额外的参数:

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)的参数都会传递给回调函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接