問題タブ [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.
python - セロリタスクのプリフェッチについて
CELERYD_PREFETCH_MULTIPLIER
構成オプション(docs )について知りました。デフォルトは 4 ですが、(私が思うに) プリフェッチをオフにするか、できるだけ低くしたいと考えています。今は 1 に設定しました。これは探しているものに十分近いですが、まだ理解できないことがいくつかあります。
このプリフェッチが良いアイデアである理由は何ですか? メッセージキューとワーカーの間に多くの待ち時間がない限り、その理由はわかりません (私の場合、それらは現在同じホストで実行されており、最悪の場合、同じデータ内の別のホストで実行される可能性があります)中心)。ドキュメントには欠点のみが記載されており、利点が何であるかは説明されていません。
多くの人は、この方法でプリフェッチをオフにできることを期待して、これを 0 に設定しているようです (私の意見では妥当な仮定です)。ただし、0 は無制限のプリフェッチを意味します。そもそもタスクキューを導入した同時実行性/非同期性が完全に排除されないのではないでしょうか?
プリフェッチをオフにできないのはなぜですか? ほとんどの場合、これをオフにすることはパフォーマンスにとって良い考えではないかもしれませんが、これが不可能な技術的な理由はありますか? それとも実装されていないだけですか?
場合によっては、このオプションは に接続され
CELERY_ACKS_LATE
ます。例えば。Roger Hu は次のように書いています«[…] 多くの場合、[ユーザー] が本当に望んでいるのは、子プロセスと同じ数のタスクだけをワーカーに予約させることです。しかし、これは遅延確認を有効にしないと不可能です […]» これら 2 つのオプションがどのように接続されているのか、なぜ一方が他方なしでは不可能なのかがわかりません。接続の別の言及はここにあります。2 つのオプションが関連付けられている理由を誰か説明できますか?
celery - 生成されたリストをセロリのタスクにマップする最良の方法
タスクから生成されたリストをセロリの別のタスクにマップする最良の方法に関するアドバイスを探しています。
parse
PDF ドキュメントを解析し、ページのリストを出力するというタスクがあるとします。次に、各ページを という別のタスクに個別に渡す必要がありますfeed
。これはすべて、というタスクの中に入る必要がありますprocess
だから、私がそれを行うことができる1つの方法はこれです:
もちろん、私はget()
タスク内で呼び出しているので、それは良い考えではありません。
さらに、私のparse
タスクはジェネレーター関数にラップされ、ページを生成できるため、これは非効率的です。つまり、最後のページがパーサーによって生成される前に、フィードのために最初のページをキューに入れることができるはずです。
別の可能性はこれを行うことです:
get()
ただし、その例にはまだタスク内での呼び出しが含まれています。さらに、この例は単純化しすぎており、すべてのページがフィードされた後 (つまり a で) いくつかのことを行う必要がありますchord
。
セロリでこれを行うための最適な方法を探しています。アドバイスをいただければ幸いです。
ありがとう!
multithreading - Celery でスレッドを確認するにはどうすればよいですか?
( Workers Guide--concurrency=1
に基づいて)を使用して、Celeryで異なる数の同時スレッドを設定しようとしています。
とにかく、デーモン ( celeryd ... --concurrency=1
) を実行すると、実行中のスレッドの数を確認する方法がわかりません。
に示す各行に対応していps -ef
ますか?
python - 指定されたモジュールからのみ DEBUG をログに記録する Celery Python ロギング構成
モジュール(ライブラリのイベントではなく)からのDEBUG(およびそれ以上)のイベントを(コンソールに)ログに記録するようにdjango celeryを取得しようとしています。したがって、セロリドを次のように開始します。
すべての DEBUG イベントがコンソール (ルート ロガーのハンドラー) に渡されることを意味します。この動作を次のように変更したいと思います。
- mymodule (および子モジュール) からの DEBUG イベントがコンソールに移動します
- 他のすべてのモジュールからの DEBUG イベントは無視されます (例: Null Handler に移動します)。
- 他のすべてのイベントは通常どおり処理されます (例: ERROR は引き続きメール ハンドラに送信されます)。
これを行う最善の方法は何ですか?
python - セロリで「再試行」が機能しない
与えられたファイルmyapp.py
で構成celeryconfig.py
両方のファイルがあるディレクトリを呼び出します。
その後
また
だから、try.txt
で作成されます
1回だけ。つまり、再試行は無視されました。
私は他にも多くのことを試しました:
- MongoDB をブローカーおよびバックエンドとして使用し、データベースを検査します (奇妙なことに、「カウントダウン」スケジュールされたジョブであっても、ブローカーの「メッセージ」コレクションには何も表示されません)
- ここの PING の例、RabbitMQ と MongoDB の両方を使用
- ( PING
print
の例のように) とlogging
- 強制が発生した後、except ブロックで再試行呼び出しを
Exception
行い、retry() を発生または返し、「throw」パラメーターをTrue
/False
/指定なしに変更します。 - 何が起こっているかを確認する
celery flower
(「ブローカー」リンクには何も表示されない)
しかし、どれも機能しませんでした =/
私のcelery report
出力:
以上、何かおかしくないですか?retry() メソッドを機能させるにはどうすればよいですか?
python - /init.d/function + python バージョン
セロリとセロリビートをデーモン化しようとしています。github から celeryd および celeybeat ファイルをダウンロードし/etc/init.d/
、/etc/default/
.
私の問題は、これら 2 つのファイルを実行すると、celeryd と celerybeat がシステム python (2.4) を使用し、その結果、python 2.7 でインストールされている他のアプリケーションを見つけることができないことです。Python 2.7 はファイルに含まれ~/.bashrc
て/.bash_profile
いるため、ワーカーが動作しない場合を除いて、他のアプリケーションの実行に問題はありません。python ...../manage.py celery
(すべてのオプションを指定して)実行すると、すべてが魅力的に機能します。
/init.d/function
python2.7を強制的に実行する方法を教えてください。
を実装しようとしまし#! /bin/sh python
たが、うまくいきません。
python - Celeryd が起動するプロセスが多すぎる
celeryd が単一のプロセスとしてのみ実行されるようにするにはどうすればよいですか? 実行するmanage.py celeryd --concurrency=1
と、ps aux | grep celery
3 つのインスタンスが実行されていることがわかります。
常に 2 つのプロセスとして実行される celerybeat にも同様の問題があることに気付きました。