Search code examples
pythontwisted

How to pass extra arguments to callback register functions with twisted python api?


I have the following python code using the twisted API.

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)

It uses the Twisted API. What i want to achieve is to pass to the callbacked function (results) the value of the name which is constructed in every iteration without changing the content of the functions_which_returns_a defer() function along with the deferred object of course. In every result of the functions_which_returns_a deffer the value of the name should be passed to results() to do something with this. I.e: at the first iteration when the execution reach the results function i need the function hold the result of the deffered object along with the value of name when i=0,then when i=1 the defered object will be passed with the value of name, and so on.So i need every time the result of the defer object when called with the name variable alond with the name variable. When i try to directly use the value of nameinside results() it holds always the value of the last iteration which is rationale, since function_which_returns_a defer(name) has not returned.


Solution

  • You can pass extra arguments to a Deferred callback at the Deferred.addCallback call site by simply passing those arguments to 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)
    

    You can also pass arguments by keyword:

            df.addCallback(results, name=name)
    

    All arguments passed like this to addCallback (or addErrback) are passed on to the callback function.