Domanda

parallela Python ha qualcosa in Invia funzione chiamata una callback ( documentazione ) tuttavia non sembra spiegare troppo bene. Ho postato sul loro forum un paio di giorni fa e non ho ricevuto una risposta. Qualcuno dovrebbe spiegare che cosa un callback è e ciò che è usato per?

Grazie.

È stato utile?

Soluzione

Una callback è una funzione fornita da parte del consumatore di un'API che l'API può poi girarsi e richiamare (chiamando indietro). Se l'installazione Ho un appuntamento dal Dr., posso dare loro il mio numero di telefono, in modo che mi può chiamare il giorno prima per confermare l'appuntamento. Una callback è simile, tranne che invece di essere solo un numero di telefono, può essere istruzioni arbitrarie come "mandami una e-mail a questo indirizzo, e anche chiamare il mio segretario e averla messa nel mio calendario.

richiamate vengono spesso utilizzati in situazioni in cui un'azione è asincrona. Se è necessario chiamare una funzione, e subito continuare a lavorare, non si può stare lì attendere per il suo valore di ritorno per farvi sapere che cosa è successo, in modo da fornire un callback. Quando la funzione è fatto completamente il suo asincrono funziona sarà poi richiamare il callback con alcuni argomenti predeterminati (di solito un po 'che fornite, e un po' sullo stato e risultato dell'azione asincrono richiesto).

Se il Dott è fuori ufficio, o stanno ancora lavorando sui tempi, piuttosto che dover farmi aspettare in attesa fino a quando non torna, che potrebbe essere diverse ore, abbiamo riagganciare, e una volta che la nomina è stata in programma, mi chiamano.

In questo caso specifico, la funzione presentare Parallel di Python invocherà il callback con argomenti che fornite e il risultato di func, una volta func ha terminato l'esecuzione.

Altri suggerimenti

Il punto rilevante nella documentazione:

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

Quindi, se volete qualche codice da eseguire non appena il risultato è pronto, si inserisce il codice in una funzione e passare quella funzione come argomento callback. Se non avete bisogno di altri argomenti, sarà solo, per esempio:.

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

Per ulteriori sul modello callback in Python, si veda ad esempio la mia presentazione qui .

Guardando al link, appena si presenta come un gancio che si chiama.

  

callback - funzione di callback, che   sarà chiamato con l'argomento           Lista pari a callbackargs + (risultato,)           non appena il calcolo viene fatto

Il "non appena il calcolo viene fatto" bit sembra ambiguo. Il punto, per quanto posso vedere di questa cosa è che la chiamata submit() distribuisce il lavoro ad altri server e poi ritorna. Poiché la finitura è asincrona, piuttosto blocco, permette di fornire una funzione che viene chiamata quando qualche unità di finiture lavoro. Se lo fai:

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

Poi presentare garantirà work_finished() viene chiamato quando l'unità di lavoro distribuita è completata sul server di destinazione.

Quando si chiama submit() è possibile fornire un callback che si chiama nello stesso tempo di esecuzione come il chiamante di submit() ... ed è chiamato dopo la distribuzione della funzione di carico di lavoro è completo.

Un po 'come "chiamata foo (x, y) quando avete fatto alcune cose in submit ()"

Ma sì, la documentazione potrebbe essere migliore. Avere un paperi alla fonte ppython e vedere a questo punto il callback viene chiamata in submit()

Un callback è una funzione di definire che è in seguito chiamato da una funzione si chiama.

A titolo di esempio, si consideri come funziona AJAX: si scrive il codice che chiama una funzione server back-end. Ad un certo punto nel futuro, ritorna da quella funzione (la "A" sta per Asynchronous, che è ciò che il "parallelo" in "Python Parallelo" è tutto). Ora - perché il codice chiama il codice sul server, si desidera per dirvi quando è fatto, e si vuole fare qualcosa con i suoi risultati. Lo fa chiamando il funzione di callback .

Quando la funzione chiamata viene completata, il modo standard per poter dire che è fatto è per voi per dire che per chiamare una funzione nel codice. Questa è la funzione di callback, e il suo compito è quello di gestire il risultato / uscita dalla funzione di livello inferiore che avete chiamato.

Una callback è semplicemente una funzione. In Python, le funzioni sono solo più oggetti, e così il nome di una funzione può essere usata come una variabile, in questo modo:

def func():
    ...

something(func)

Si noti che molte funzioni che accettano un callback come un argomento di solito richiedono che il callback accetta alcuni argomenti. In questo caso, la funzione di callback dovrà accettare una lista di argomenti specificati in callbackargs. Non ho dimestichezza con Python in parallelo in modo da non so esattamente ciò che vuole.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top