[解決済み] celeryのタスクプリフェッチを理解する
質問
コンフィギュレーション・オプションの
CELERYD_PREFETCH_MULTIPLIER
(
ドキュメント
). デフォルトは4ですが、(確か)私はプリフェッチをオフにするか、できるだけ低くしたいのです。今は1にしているので、求めているものに近いのですが、まだわからないことがあります。
-
なぜこのプリフェッチが良いアイデアなのでしょうか。メッセージキューとワーカーの間に多くのレイテンシーがない限り、その理由はよくわかりません(私の場合、現在同じホストで動作していますが、最悪の場合、同じデータセンター内の異なるホストで動作する可能性があります)。ドキュメントでは、欠点に言及するだけで、利点が何であるかを説明していません。
-
多くの人はこれを 0 に設定し、その方法でプリフェッチをオフにできることを期待しているようです(私の意見では、妥当な仮定です)。しかし、0 は無制限のプリフェッチを意味します。なぜ無制限のプリフェッチを望むのでしょうか。それは、そもそもタスクキューを導入した際の同時実行性/非同期性を完全に排除してしまうのではありませんか。
-
なぜプリフェッチをオフにできないのでしょうか?ほとんどの場合、それをオフにすることはパフォーマンスにとって良いアイデアではないかもしれませんが、これができない技術的な理由があるのでしょうか? あるいは、単に実装されていないだけなのでしょうか?
-
時々、このオプションに接続されている
CELERY_ACKS_LATE
. 例えば Roger Hu さんが書き込みました。 "[...] しばしば[ユーザーが]本当に欲しいものは、子プロセスの数だけワーカーにタスクを予約させることです。しかし、これは遅延承認を有効にしない限り不可能です[...]」 この2つのオプションがどのように関連しているのか、そしてなぜ一方が他方なしでは不可能なのか、私には理解できないのです。この関連性については、次のような記述もあります。 ここで . なぜこの2つのオプションがつながっているのか、どなたか説明してください。
どのように解決するのですか?
-
プリフェッチは、パフォーマンスを向上させることができます。ワーカーは、ブローカーからの次のメッセージを処理するために待つ必要がありません。ブローカーと一度通信し、多くのメッセージを処理することで、パフォーマンスを向上させることができます。ブローカーからのメッセージの取得は(たとえローカルであっても)、ローカルメモリへのアクセスに比べれば高価です。ワーカーはまた、バッチでメッセージを承認することができます。
-
ゼロに設定されたプリフェッチは、無制限ではなく "特定の制限なし" を意味します。
-
プリフェッチを 1 に設定することは、それをオフにすることと同等であると文書化されていますが、これは常にそうであるとは限りません ( https://stackoverflow.com/a/33357180/71522 )
-
プリフェッチにより、メッセージを一括で承認することができます。CELERY_ACKS_LATE=True は、メッセージがワーカーに到達したときに確認することを防ぎます。
関連
-
[解決済み] スライス表記を理解する
-
[解決済み] 億の相対的輸入
-
[解決済み] Project Eulerとの速度比較。CとPythonとErlangとHaskellの比較
-
[解決済み] Python 3.3のyield from構文は、実際にはどのような用途に使われるのでしょうか。
-
[解決済み】ilocとlocはどう違うのですか?
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] PILからopenCVフォーマットへの変換
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Pythonの検索パスを他のソースに展開する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?