No
estaba leyendo algunos documentación del módulo y vi algo que no entendí, en la explicación de los parámetros de un método:
callback
– función de devolución de llamada que se llamará con una lista de argumentos igual acallbackargs+(result,)
tan pronto como se hace el cálculo
callbackargs
– argumentos adicionales para el grupo de funciones de devolución de llamada – grupo de trabajo, se utiliza cuandowait(group)
se llama para esperar a que finalicen los trabajos en un grupo dado
¿Cómo puedo llamar al método y proporcionar argumentos correctamente para estos parámetros? ¿Para qué se utilizan y cómo funciona este esquema de “devolución de llamada”?
logan capaldo
Una devolución de llamada es una función proporcionada por el consumidor de una API que la API puede cambiar e invocar (devolviéndole la llamada). Si programo una cita con el Dr., puedo darles mi número de teléfono, para que puedan llamarme el día anterior para confirmar la cita. Una devolución de llamada es así, excepto que en lugar de ser solo un número de teléfono, pueden ser instrucciones arbitrarias como “envíame un correo electrónico a esta dirección y también llama a mi secretaria y pídele que lo anote 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 continuar trabajando, no puede quedarse sentado esperando su valor de retorno para informarle lo que sucedió, por lo que debe devolver la llamada. Cuando la función haya terminado por completo su trabajo asincrónico, invocará su devolución de llamada con algunos argumentos predeterminados (generalmente algunos que usted proporciona y algunos sobre el estado y el resultado de la acción asincrónica que solicitó).
Si el Dr. está fuera de la oficina, o todavía están trabajando en el horario, en lugar de hacerme esperar en espera hasta que regrese, lo que podría ser varias horas, colgamos y, una vez que se programó la cita, ellos llámame.
En este caso específico, el método documentado calculará la result
ponlo junto con cualquier callbackargs
especificado, y llamar callback
pasándole esos valores como argumentos.
-
Esto recibe un gran voto positivo de mi parte (sin embargo, solo vale lo mismo que cualquier otro voto positivo) por una analogía muy comprensible que probablemente será útil para los principiantes o cualquier persona nueva en esta técnica.
– Juan Y.
23 de agosto de 2009 a las 18:13
-
Esta es una muy buena explicación para principiantes, solo le falta una cosa: un código de muestra. Ahora que un principiante sabe lo que es, ¿podría darnos un ejemplo simple de cómo se vería usando su análogo como nombres de función ea:
callDoctor() callPatientBack()
etc.–Alfa Bravo
30 de septiembre de 2017 a las 7:58
-
Para obtener más explicaciones teóricas independientes del idioma, consulte ¿Qué es una función de devolución de llamada?. Traté de solucionar la pregunta para que el aspecto práctico (cómo usar la API en cuestión) fuera lo más claro posible.
– Karl Knechtel
6 de enero a las 2:35
alex martelli
Si desea que se ejecute algún código tan pronto como el resultado esté listo, coloque ese código en una función y páselo como el callback
argumento. Por ejemplo, suponiendo que no se necesitan otros argumentos para esa función:
def itsdone(result):
print(f"Done! result={result}")
...
submit(..., callback=itsdone)
Para obtener más información sobre cómo funciona esto en Python, consulte, por ejemplo mi presentación en el tema.
-
¿No querrás decir “en ese momento” en lugar de “mientras”?
– Dykam
23 de agosto de 2009 a las 17:49
-
Quise decir “tan pronto como”, al igual que los documentos que cité, déjame editar para corregir, ¡gracias!
– Alex Martelli
23 de agosto de 2009 a las 18:00
-
¿Puedes volver a publicar el enlace de la presentación?
– Vishesh Mangla
25 sep 2020 a las 21:36
-
@AlexMartelli, el enlace de la presentación no funciona.
– garej
23 de enero de 2021 a las 6:57
Campana de Aiden
Mirando el enlace, solo parece un gancho que se llama.
devolución de llamada: función de devolución de llamada que se llamará con una lista de argumentos igual a callbackargs+(resultado) tan pronto como se realice el cálculo
El bit “tan pronto como se realice el cálculo” parece ambiguo. El punto, por lo que puedo ver de esto, es que el submit()
call distribuye el trabajo a otros servidores y luego regresa. Debido a que el acabado es asíncrono, más bien por bloques, le permite proporcionar una función que se llama cuando finaliza alguna unidad de trabajo. Si lo haces:
submit( ..., callback=work_finished, ... )
Entonces enviar asegurará work_finished()
se llama cuando la unidad de trabajo distribuido se completa en el servidor de destino.
Cuando usted llama submit()
puede proporcionar un llamar de vuelta que se llama en el mismo tiempo de ejecución que la persona que llama de submit()
… y se llama después de que se completa la distribución de la función de carga de trabajo.
Algo así como “llamar a foo (x, y) cuando haya hecho algunas cosas en el envío ()”
Pero sí, la documentación podría ser mejor. Eche un vistazo a la fuente de python y vea en qué punto se llama a la devolución de llamada submit()
A llamar de vuelta es una función que define que luego es llamada por una función que llama.
Como ejemplo, considere cómo funciona AJAX: escribe un código que llama a una función de servidor back-end. En algún momento en el futuro, regresa de esa función (la “A” significa Asynchronous, que es de lo que se trata “Parallel” en “Parallel Python”). Ahora, debido a que su código llama al código en el servidor, quiere que le diga cuándo está listo y quiere hacer algo con sus resultados. Lo hace llamando a su función de devolución de llamada.
Cuando la función llamada se completa, la forma estándar para que le diga que ha terminado es que usted le diga que llame a una función en su código. Esa es la función de devolución de llamada, y su trabajo es manejar los resultados/salidas de la función de nivel inferior a la que ha llamado.
Marsolk
Una devolución de llamada es simplemente una función. En Python, las funciones son solo más objetos, por lo que el nombre de una función se puede usar como una variable, así:
def func():
...
something(func)
Tenga en cuenta que muchas funciones que aceptan una devolución de llamada como argumento generalmente requieren que la devolución de llamada acepte ciertos argumentos. En este caso, la función de devolución de llamada deberá aceptar una lista de argumentos especificados en callbackargs.