2009-08-23 14 views

Odpowiedz

104

Callback to funkcja dostarczana przez konsumenta interfejsu API, którą interfejs API może następnie odwrócić i wywołać (oddzwaniać). Jeśli ustawię wizytę dr, mogę dać im mój numer telefonu, aby mogli zadzwonić do mnie dzień wcześniej, aby potwierdzić spotkanie. Takie jest wywołanie zwrotne, z wyjątkiem tego, że zamiast być numerem telefonu, mogą to być dowolne instrukcje, takie jak "wyślij mi e-mail pod tym adresem, a także zadzwoń do sekretarki i umieść ją w moim kalendarzu."

Oddzwonienia są często używane w sytuacjach, w których akcja jest asynchroniczna.Jeśli potrzebujesz wywołać funkcję i od razu kontynuować pracę, nie możesz siedzieć tam i czekać na jej wartość zwracaną, aby poinformować cię, co się stało, więc zapewnij wywołanie zwrotne. zostanie wykonana całkowicie asynchroniczna praca, a następnie wywoła twoje wywołanie zwrotne z pewnymi z góry określonymi argumentami (zwykle niektóre z nich dostarczą, a niektóre o statusie i wyniku żądanej akcji asynchronicznej).

Jeśli doktor jest poza biurem lub nadal pracują nad harmonogramem, zamiast czekać na mnie, dopóki nie wróci, co może zająć kilka godzin, czekamy, a kiedy umówimy się na spotkanie, zadzwonią do mnie.

W tym konkretnym przypadku funkcja przesyłania Parallel Pythona wywoła twoje wywołanie zwrotne z dowolnymi argumentami, które podasz, i wynikiem func, po zakończeniu wykonywania func.

+5

To robi mi dużą wiadomość (wciąż tylko wartą tego samego co inne) za bardzo zrozumiałą analogię, która prawdopodobnie będzie pomocna dla początkujących lub ktoś nowy w tej technice –

+1

Jest to bardzo dobre wytłumaczenie dla początkujących, po prostu brakuje jednej rzeczy - kodu przykładowego. Teraz, gdy początkujący wie, co to jest, czy mógłbyś dać nam prosty przykład tego, jak to wyglądałoby? używanie twojego analogu jako nazw funkcji ea: 'callDoctor() callPatientBack()' etc –

3

Patrząc na łącze, wygląda jak haczyk, który jest nazywany.

oddzwaniania - funkcja zwrotna, która zostanie wywołana z argumentem listy równej callbackargs + (wynik,) najszybciej jak obliczanie odbywa

„jak najszybciej kalkulacja jest wykonywana” bit wydaje dwuznaczny. Punktem, o ile widzę, jest to, że wywołanie submit() rozprowadza pracę na inne serwery, a następnie zwraca. Ponieważ wykańczanie jest asynchroniczne, a raczej blokowe, pozwala na zapewnienie funkcji, która jest wywoływana, gdy kończy się jakaś jednostka pracy. Jeśli tak:

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

Następnie złożyć zapewni work_finished() jest wywoływana, gdy jednostka rozproszonej pracy jest zakończone na serwerze docelowym.

Po wywołaniu submit() można podać zwrotnego który nazywa się w tym samym czasie wykonywania jako wywołującego submit() ... i to się nazywa po podział funkcji obciążenia jest kompletna.

Coś jak "foo połączeń (x, y), kiedy masz zrobić kilka rzeczy w submit()"

Ale owszem, dokumentacja może być lepiej. Mają ganders u źródła ppython i zobaczyć w którym momencie wywołania zwrotnego jest wywoływana w submit()

14

The odpowiednim miejscu w 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 

Tak więc, jeśli chcesz jakiś kod wykonywany tak szybko, jak Wynik jest gotowy, wstawiamy ten kod do funkcji i przekazujemy tę funkcję jako argument callback. Jeśli nie potrzebują innych argumentów, to będzie po prostu, np .:

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

więcej na wzór w Pythonie callback, patrz np moja prezentacja here.

+1

Nie masz na myśli "w tym czasie" zamiast "tak długo"? – Dykam

+0

Miałem na myśli "tak szybko jak", podobnie jak dokumenty, które zacytowałem - pozwól mi edytować, dzięki! –

+5

Niestety twoje linki nie działają :( – bluish

1

Połączenie zwrotne jest po prostu funkcją. W Pythonie, funkcje są po prostu więcej obiektów, a więc nazwa funkcji może być używana jako zmienna, tak jak poniżej:

def func(): 
    ... 

something(func) 

Należy pamiętać, że wiele funkcji, które akceptuje wywołania zwrotnego jako argument zwykle wymagają, aby zwrotna zaakceptować pewne argumenty. W takim przypadku funkcja oddzwaniania będzie musiała zaakceptować listę argumentów podaną w callbackargs. Nie znam Parallel Pythona, więc nie wiem dokładnie, czego chce.

3

A callback to zdefiniowana funkcja, która jest później wywoływana przez funkcję, którą wywołujesz.

Jako przykład zastanów się, jak działa AJAX: piszesz kod, który wywołuje funkcję serwera zaplecza. W pewnym momencie wróci z tej funkcji ("A" oznacza Asynchroniczny, o to chodzi w "Parallel" w "Parallel Python"). Teraz - ponieważ twój kod wywołuje kod na serwerze, chcesz, aby poinformował cię, kiedy to zrobisz, i chcesz zrobić coś z jego wynikami. Czyni to, wywołując swoją funkcję zwrotną .

Po zakończeniu wywoływanej funkcji, standardowy sposób powiadamiania użytkownika o tym, że jest wykonywany, polega na poleceniu wywołania funkcji w kodzie. To jest funkcja wywołania zwrotnego, a jej zadaniem jest obsłużyć wyniki/dane wyjściowe z funkcji niższego poziomu, którą wywołałeś.