2011-10-25 9 views
8

Tengo el siguiente código python usando la API retorcida.¿Cómo pasar argumentos adicionales a las funciones de registro de devolución de llamada con la api twisted 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) 

Utiliza la API torcida. Lo que quiero lograr es pasar a la función callbacked (resultados) el valor del nombre que se construye en cada iteración sin cambiar el contenido de la función functions_which_returns_a defer() junto con el objeto diferido, por supuesto. En cada resultado de las funciones _que devuelve _a defferir el valor del nombre se debe pasar a results() para hacer algo con esto. Es decir: en la primera iteración cuando la ejecución alcanza la función de resultados, necesito que la función mantenga el resultado del objeto diferido junto con el valor del nombre cuando i = 0, cuando i = 1 el objeto desviado será pasado con el valor de nombre, y así sucesivamente. Por lo tanto, necesito cada vez el resultado del objeto diferido cuando se llama con la variable de nombre alond con la variable de nombre. Cuando trato de usar directamente el valor de los resultados de nombre de entrada(), siempre contiene el valor de la última iteración, que es racional, ya que function_which_returns_a defer (name) no ha regresado.

Respuesta

15

Puede pasar argumentos adicionales a una devolución de llamada Deferred en el sitio Deferred.addCallback llamada simplemente pasando los argumentos a 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) 

También puede pasar argumentos por palabra clave:

 df.addCallback(results, name=name) 

Todos los argumentos pasado de esta manera a addCallback (o addErrback) pasan a la función de devolución de llamada.

Cuestiones relacionadas