delayed() 関数は何をするのですか (Python で joblib を使用した場合)
質問
私は
のドキュメントを読みました。
が何を意味しているのか理解できません。
The delayed function is a simple trick to be able to create a tuple (function, args, kwargs) with a function-call syntax.
以下のように操作したいリスト(allImages)を繰り返し処理するために使っています。
def joblib_loop():
Parallel(n_jobs=8)(delayed(getHog)(i) for i in allImages)
これは私が望むように(そして私の8つのコアをすべて使ってスピードアップして)私のHOG機能を返しますが、私はそれが実際に何をやっているのかよくわかりません。
私の Python の知識は、せいぜいまあまあで、基本的な何かを見逃している可能性が非常に高いです。正しい方向への任意のポインターは非常にありがたいです。
どのように解決するのですか?
と書くとどうなるか、考えてみるとよくわかると思います。
Parallel(n_jobs=8)(getHog(i) for i in allImages)
というように、この文脈では、より自然に表現することができます。
-
を作成します。
Parallel
インスタンスを作成します。n_jobs=8
-
リストを作成する
[getHog(i) for i in allImages]
-
にそのリストを渡します。
Parallel
インスタンスに渡します。
何が問題なのか?リストが
Parallel
オブジェクトに渡されるまでに、すべての
getHog(i)
の呼び出しは既に返されたので、Parallelで実行するものは何も残っていないのです! すべての作業はすでにメインスレッドで順次行われたのです。
私たちが 実際に は、どの関数をどの引数で呼び出したいかを Python に伝えることです。 を実際に呼び出すことなく - 言い換えれば、私たちがしたいのは を遅らせる を実行させたいのです。
これは
delayed
は便利なことに、明確な構文で私たちを可能にします。もし私たちがPythonに、私たちが
foo(2, g=3)
を呼び出したい場合、単に次のように書けばよいのです。
delayed(foo)(2, g=3)
. 返されるのはタプル
(foo, [2], {g: 3})
を含む、タプルです。
-
への参照。
機能
への参照、例えば
foo
-
すべて
引数
(短い "args") キーワードなし、例: t
2
-
全て
キーワード引数
(短い "kwargs"), 例.
g=3
ということは
Parallel(n_jobs=8)(delayed(getHog)(i) for i in allImages)
と書くことで、次のようになります。
-
A
Parallel
のインスタンスでn_jobs=8
が作成されます。 -
リスト
[delayed(getHog)(i) for i in allImages]
が作成され、その評価は
[(getHog, [img1], {}), (getHog, [img2], {}), ... ]
-
そのリストは
Parallel
インスタンスに渡されます。 -
は
Parallel
インスタンスは8つのスレッドを作成し、リストのタプルをそれらに分配します。 -
最後に、これらのスレッドのそれぞれがタプルの実行を開始します。つまり、2番目と3番目の要素を引数としてアンパックした最初の要素を呼び出します。
tup[0](*tup[1], **tup[2])
を呼び出し、タプルを私たちが実際に意図した呼び出しに戻します。getHog(img2)
.
関連
-
[解決済み] Python 3 の "python -m SimpleHTTPServer" に相当するものは何ですか?
-
[解決済み] Pythonの "assert "はどのように使うのですか?
-
[解決済み] Pythonの@propertyデコレーターはどのように機能するのでしょうか?
-
[解決済み] Pythonの変数名や関数名の命名規則について教えてください。
-
[解決済み] Pythonの__future__は何に使うのか、いつ、どのように使うのか、その仕組みについて
-
[解決済み] Pythonの "at"(@)マークは何をするものですか?
-
[解決済み] Pythonの関数定義における->の意味とは?
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。