問題タブ [celeryd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
celery - セロリの app.conf.humanize(with_defaults=False) のデフォルトと見なされるものは何ですか?
ユーザーガイドapp.conf.humanize(with_defaults=False)
の例に従って、セロリの設定を印刷しようとしています。しかし、 を使用すると常に空の文字列が返されます。代わりにを使用して変更を確認できるため、構成の変更が有効であることがわかります。with_defaults=False
.humanize(with_defaults=True)
で構成を追加するとapp.conf.config_from_object('myconfig')
、構成設定が「デフォルト」としてロードされると思いますが、デフォルトではない方法でモジュールで構成をロードする方法はありますか?myconfig
これは私のソースコードです:
と
セロリの使用を開始するenv PYTHONPATH=. celery worker --loglevel=INFO
と、印刷されますconfig:
(変更するwith_defaults=True
と、期待される完全な出力が得られます)。
python - 誤って構成されたセロリの修正 (supervisord で実行)
私は、8 つのコアまたは CPU を備えた単一の VM でホストされている Python/Django Web プロジェクトで、タスクのためにセロリの実行を開始しました。今すぐ設定を改善する必要があります - 私は初歩的なミスを犯しました。
私はsupervisor
セロリの労働者とビートを処理するために使用します。には/etc/supervisor/conf.d/
、worker 関連の conf ファイルcelery1.conf
とcelery1.conf
. するべきか...
1)それらの 1 つを削除しますか? どちらも異なるワーカーを生成します。つまり、以前の conf ファイルにはcommand=python manage.py celery worker -l info -n celeryworker1
. 後者はcommand=python manage.py celery worker -l info -n celeryworker2
. ここでは、マシンごとに 1 つのワーカーを実行することが正式に述べられています。
2) conf をnumprocs
いじくり回しますか? 現在 にありcelery1.conf
、 を定義しましnumprocs=2
た。では、 *celery2.conf
を定義しました(後でフッターを参照)。numprocs=3
同時に/etc/default/celeryd
、私は を持っていCELERYD_OPTS="--time-limit=300 --concurrency=8"
ます。どうしたの?スーパーバイザーは celerydnumprocs
よりも優先されますか、それとも何ですか? concurrency
設定する必要がありnumprocs=0
ますか?
*両方のファイルの合計 numprocs = 2+3 = 5. これでチェックアウトされます。sudo supervisorctl
5 つのセロリ ワーカー プロセスを示します。しかし、newrelic では、celeryd に対して45 のプロセスが実行されています。一体何?! スーパーバイザーによって作成された各 proc が実際に (celeryd を介して) 8 つの proc を生成している場合でも、合計numprocs x concurrency = 5 x 8 = 40
. これは、newrelic が示した 45 よりも 5 少ない数です。これらの過ちを正すためのガイダンスが必要です。
スクリーンショットを比較します。
対
python - グループタスクの実行中にコードグループを変更する
chord
定期的なタスクで次を実行しています。
各タスク ( task_A1
、task_A2
... 、task_An
) の実行には 5 ~ 10 分かかる場合があります。
次のシナリオを考えてみましょう: 定期的なタスク (毎時) の間、task_A1
..task_An
が並行して実行されています。ここで、別のフローから誰かが外部task_A1'
タスクをトリガーしました。私の目標は、現在実行中のものだけを停止して置き換えtask_A1
、フローをそのまま (停止せずに..)維持task_A1'
することtask_A2
です。task_An
task_A2, ... ,task_An
task_A1'
task_B
task_A1
私の現在の解決策は、 &を取り消しtask_B
て新しいタスクtask_A1'
&をキューに追加することですが、次のようなものを達成するためにtask_B'
、既に実行中の とこの新しい組み合わせを作成する方法を知りたいです:task_A2, ... , task_An
タスクを取り消し、CeleryRouter でそれらを「再配線」することでそれを行っています。と からタスクを取得しceleryapp.control.inspect().active()
ていceleryapp.control.inspect().reserved()
ます。私の目標を達成するエレガントな方法があるのだろうか。
ありがとう。