Pregunta

Python paralelo que tiene algo en el Enviar una función llamada devolución de llamada ( documentación ) sin embargo, no parece explicarlo muy bien. He publicado en su foro hace un par de días y no he recibido una respuesta. ¿Podría alguien explicar lo que es una devolución de llamada y para qué se usa para?

Gracias.

¿Fue útil?

Solución

Una devolución de llamada es una función proporcionada por el consumidor de una API que la API se puede dar la vuelta e invocar (llamar de vuelta). Si I fijó una cita con el doctor, puedo darles mi número de teléfono, por lo que me puedo llamar el día antes para confirmar la cita. Una devolución de llamada es así, excepto que en lugar de ser sólo un número de teléfono, puede haber instrucciones arbitrarias como "me envíe un correo electrónico a esta dirección, y también llamar a mi secretaria y que ella lo puso en mi calendario.

Las devoluciones de llamada se utilizan a menudo en situaciones en las que una acción es asíncrona. Si necesita llamar a una función, e inmediatamente seguir trabajando, no puede sentarse allí esperar a que su valor de retorno para hacerle saber lo que pasó, lo que proporcionará una devolución de llamada. Cuando la función se realiza por completo su asíncrono funciona será entonces invocar su respuesta con algunos argumentos predeterminados (por lo general un poco de que la oferta, y algunos sobre el estado y resultado de la acción que ha solicitado asíncrona).

Si el doctor está fuera de la oficina, o que se sigue trabajando en el calendario, en lugar de tener que me esperar en suspenso hasta que vuelva, que podría ser de varias horas, de colgar el teléfono, y una vez que el nombramiento haya sido programado, me llaman.

En este caso específico, la función de presentar Python paralelo invocará su respuesta con argumentos que la oferta y el resultado de func, una vez func ha terminado de ejecutarse.

Otros consejos

El punto relevante en los documentos:

callback - callback function which will be called with argument 
        list equal to callbackargs+(result,) 
        as soon as calculation is done
callbackargs - additional arguments for callback function

Así que, si quieres algo de código que se ejecutará tan pronto como el resultado está listo, se pone el código en una función y pasa esa función como argumento callback. Si no necesita otros argumentos, que será igual, por ejemplo:.

def itsdone(result):
  print "Done! result=%r" % (result,)
...
submit(..., callback=itsdone)

Para más información sobre el patrón callback en Python, véase, por ejemplo mi presentación aquí .

En cuanto a la relación, sólo se parece a un gancho que se llama.

  

devolución de llamada - llamada de retorno la cual   será llamado con el argumento           lista igual a callbackargs + (resultado,)           tan pronto como se realiza el cálculo

El "tan pronto como se realiza el cálculo" poco parece ambigua. El punto, por lo que yo puedo ver de esto es que la llamada submit() distribuye el trabajo a otros servidores y luego regresa. Debido a que el acabado es asíncrona, en lugar de bloques, que le permite ofrecer una función que se llama cuando alguna unidad de acabados de trabajo. Si lo hace:

submit( ..., callback=work_finished, ... )

A continuación, se asegurará de presentar work_finished() se llama cuando la unidad de trabajo distribuida se completa en el servidor de destino.

Cuando se llama a submit() puede proporcionar un devolución de llamada que se llama en el mismo tiempo de ejecución como de la persona que llama submit() ... y es llamado después de la distribución de la función de la carga de trabajo se haya completado.

Algo así como "foo llamada (x, y) cuando se han hecho algunas cosas en submit ()"

Pero sí, la documentación podría ser mejor. Tener una gansos en la fuente ppython y ver en que punto la devolución de llamada se llama en submit()

de devolución de llamada es una función que defina que es más tarde llamado por una función de llamar.

A modo de ejemplo, consideremos cómo funciona AJAX: se escribe código que llama a una función de servidor de servicios de fondo. En algún momento en el futuro, que regresa de esa función (la "A" significa asíncrono, que es lo que el "paralelo" en "Python paralelo" se trata). Ahora - porque su código llama al código en el servidor, usted quiere que le diga cuando esté hecho, y quiere hacer algo con sus resultados. Y lo hace llamando a su llamada de retorno .

Cuando la función llamada completa, la forma estándar para que se diga que se hace es para que usted diga que llamar a una función en el código. Esa es la función de devolución de llamada, y su trabajo es manejar los resultados del / salida de la función de nivel inferior que ha llamado.

A de devolución de llamada es simplemente una función. En Python, las funciones son simplemente más objetos, por lo que el nombre de una función puede ser utilizado como una variable, así:

def func():
    ...

something(func)

Tenga en cuenta que muchas de las funciones que aceptan una devolución de llamada como un argumento por lo general requieren que la devolución de llamada aceptar ciertos argumentos. En este caso, la función de devolución de llamada tendrá que aceptar una lista de argumentos especificados en callbackargs. No estoy familiarizado con Python paralelo, así que no sé exactamente lo que quiere.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top