Question

Python parallèle il a quelque chose dans la fonction Envoyer appelé un rappel semble mais il ne ( documentation ) ne pas expliquer trop bien. Je l'ai posté sur leur forum il y a quelques jours et je ne l'ai pas reçu une réponse. Quelqu'un aurait-il expliquer ce qu'est un rappel est et ce qu'il est utilisé?

Merci.

Était-ce utile?

La solution

Un rappel est une fonction fournie par le consommateur d'une API que l'API peut alors tourner autour et appeler (vous rappeler). Si la configuration I rendez-vous du Dr un, je peux leur donner mon numéro de téléphone, afin qu'ils puissent me appeler la veille pour confirmer la nomination. Un rappel est comme ça, sauf qu'au lieu d'être simplement un numéro de téléphone, il peut y avoir des instructions arbitraires comme « envoyez-moi un e-mail à cette adresse, et aussi appeler ma secrétaire et ont la mettre dans mon calendrier.

Les callbacks sont souvent utilisés dans des situations où une action est asynchrone. Si vous avez besoin d'appeler une fonction, et immédiatement continuer à travailler, vous ne pouvez pas rester là pour attendre sa valeur de retour pour vous faire savoir ce qui est arrivé, vous fournir un rappel. Lorsque la fonction est fait complètement son asynchrone fonctionne, il invoquera alors votre rappel avec quelques arguments prédéterminés (habituellement certains que vous fournissez, et quelques-uns sur l'état et le résultat de l'action asynchrone demandée).

Si le Dr est hors du bureau, ou ils travaillent encore sur le calendrier, plutôt que de me attendre d'avoir en attente jusqu'à ce qu'il revienne, ce qui peut prendre plusieurs heures, nous raccrocher, et une fois que la nomination a été prévu, ils me appellent.

Dans ce cas précis, la fonction de soumission de Python parallèle invoquera votre rappel avec des arguments que vous fournissez et le résultat de func, une fois func a terminé son exécution.

Autres conseils

Le point pertinent dans les docs:

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

Donc, si vous voulez un peu de code à exécuter dès que le résultat est prêt, vous mettez ce code dans une fonction et passez cette fonction comme argument de callback. Si vous n'avez pas besoin d'autres arguments, il sera juste, par exemple:.

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

Pour en savoir plus sur le motif de callback dans le python, voir par exemple ma présentation .

En regardant le lien, juste ressemble à un crochet qui est appelé.

  

callback - fonction de rappel qui   sera appelé avec un argument           liste égale à callbackargs + (résultat)           dès que le calcul est fait

Le « dès que le calcul est fait » bit semble ambigu. Le point, pour autant que je peux voir de cette chose est que l'appel submit() répartit le travail à d'autres serveurs, puis retourne. Parce que la finition est asynchrone, plutôt bloc, il vous permet de fournir une fonction qui est appelée quand une unité de finition de travail. Si vous faites:

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

Ensuite, soumettez assurera work_finished() est appelée lorsque l'unité de travail distribué est terminée sur le serveur cible.

Lorsque vous appelez submit() vous pouvez fournir un rappel qui est appelé dans le même temps d'exécution que l'appelant de submit() ... et il est appelé après la distribution de la fonction de la charge de travail est terminée.

Un peu comme "appel foo (x, y) quand vous avez fait des choses à soumettre ()"

Mais oui, la documentation pourrait être mieux. Avoir un jars à la source de ppython et voir à quel point le rappel est appelé à submit()

rappel est une fonction que vous définissez qui est appelé plus tard par une fonction que vous appelez.

À titre d'exemple, examiner comment fonctionne AJAX: vous écrivez du code qui appelle une fonction de serveur back-end. À un certain moment dans l'avenir, il revient de cette fonction (le « A » signifie Asynchronous, qui est ce que le « parallèle » dans « Python parallèle » est tout au sujet). Maintenant - parce que votre code appelle le code sur le serveur, vous voulez vous dire quand il est fait, et que vous voulez faire quelque chose avec ses résultats. Il le fait en appelant votre fonction de rappel .

Lorsque la fonction appelée est terminée, la façon standard pour vous dire que ce qui est fait est pour vous de dire pour appeler une fonction dans votre code. C'est la fonction de rappel, et son travail est de gérer les résultats / sortie de la fonction de niveau inférieur vous avez appelé.

Un rappel est simplement une fonction. En Python, les fonctions ne sont que plusieurs objets, et ainsi le nom d'une fonction peut être utilisée comme une variable, comme suit:

def func():
    ...

something(func)

Notez que de nombreuses fonctions qui acceptent un rappel comme un argument exigent généralement que le rappel accepte certains arguments. Dans ce cas, la fonction de rappel devra accepter une liste d'arguments spécifiés dans callbackargs. Je ne suis pas familier avec Python parallèle, donc je ne sais pas exactement ce qu'il veut.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top