Parallel Pythonでは、サブミット関数にコールバック( documentation ) と呼ばれるものがありますが、それはあまりよく説明されていないようです。数日前に彼らのフォーラムに投稿しましたが、応答がありません。誰かがコールバックとは何か、そしてそれが何のために使われるかを説明してくれますか?
5 に答える
コールバックは、API のコンシューマーによって提供される関数であり、API はそれを取り返し、呼び出すことができます (コールバックします)。医師の予約を設定すると、電話番号を教えてくれるので、前日に電話して予約を確認できます。コールバックはそのようなものですが、電話番号だけでなく、「このアドレスにメールを送って、秘書に電話して、カレンダーに入れさせて」などの任意の指示にすることもできます。
コールバックは、アクションが非同期である状況でよく使用されます。関数を呼び出す必要があり、すぐに作業を続行する場合、その戻り値が何が起こったかを知らせるのを待つことができないため、コールバックを提供します。関数が完全に非同期処理を完了すると、事前に定義された引数 (通常はユーザーが指定する引数と、要求した非同期アクションのステータスと結果に関する引数) を使用してコールバックが呼び出されます。
医師が不在の場合、または医師がまだスケジュールに取り組んでいる場合、医師が戻ってくるまで数時間待たされるのではなく、私たちは電話を切り、予約がスケジュールされると、医師は彼らに電話をかけます。電話してね。
func
この特定のケースでは、Parallel Python の submit 関数は、func
実行が完了すると、指定した引数と の結果を使用してコールバックを呼び出します。
ドキュメント内の関連する場所:
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
したがって、結果が準備できたらすぐにコードを実行する場合は、そのコードを関数に入れ、その関数をcallback
引数として渡します。他の引数が必要ない場合は、次のようになります。
def itsdone(result):
print "Done! result=%r" % (result,)
...
submit(..., callback=itsdone)
Python でのパターンの詳細については、たとえば、こちらcallback
の私のプレゼンテーションを参照してください。
リンクを見ると、呼ばれるフックのように見えます。
callback - 計算が完了するとすぐに callbackargs+(result,) に等しい引数リストで呼び出されるコールバック関数
「計算が完了したらすぐに」ビットがあいまいに見えます。ポイントは、私が見る限り、submit()
呼び出しが他のサーバーに作業を分散してから戻るということです。仕上げはブロックではなく非同期であるため、何らかの作業単位が終了したときに呼び出される関数を提供できます。もしあなたがそうするなら:
submit( ..., callback=work_finished, ... )
work_finished()
次に、対象サーバーで分散作業の単位が完了すると、submit が確実に呼び出されます。
呼び出すときに、... の呼び出し元と同じランタイムで呼び出されるコールバックsubmit()
を提供できます。これは、ワークロード関数の分散が完了した後に呼び出されます。submit()
「submit() で何らかの処理を行ったときに foo(x,y) を呼び出す」ようなものです。
しかし、そうです、ドキュメントはより良いものになる可能性があります。ppython のソースをざっと見て、コールバックがどの時点で呼び出されるかを確認しますsubmit()
コールバックは、呼び出した関数によって後で呼び出される、定義した関数です。
例として、AJAX がどのように機能するかを考えてみましょう。バックエンド サーバー関数を呼び出すコードを記述します。将来のある時点で、その関数から戻ります (「A」は非同期を表し、「Parallel Python」の「Parallel」がすべてです)。ここで、コードがサーバー上のコードを呼び出すため、コードが完了したことを通知する必要があり、その結果を使用して何かを実行したいと考えています。これは、コールバック関数を呼び出すことによって行われます。
呼び出された関数が完了すると、それが完了したことを知らせる標準的な方法は、コード内の関数を呼び出すように指示することです。それがコールバック関数であり、その仕事は、呼び出した下位レベルの関数からの結果/出力を処理することです。
コールバックは単なる関数です。Python では、関数は単なるオブジェクトであるため、次のように関数の名前を変数として使用できます。
def func():
...
something(func)
通常、コールバックを引数として受け入れる多くの関数では、コールバックが特定の引数を受け入れる必要があることに注意してください。この場合、コールバック関数は callbackargs で指定された引数のリストを受け入れる必要があります。私は Parallel Python に詳しくないので、それが何を望んでいるのか正確にはわかりません。