問題タブ [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.

0 投票する
1 に答える
3236 参照

celery - セロリマルチが期待どおりに機能しない

これは私のプロジェクトフォルダー構造です

タスクには、というタスクがありますExamineColumns

を使用してワーカーを起動しますcelery worker -A api.jobs --loglevel=Info

正常に動作し、タスクを実行できます。

これは、セロリの検査コマンドの出力です

しかし、マルチモードを試してみると、うまくいきません。実行して実行しようとしています

でも全然始まらない。

なぜ機能しないのかわかりません

0 投票する
3 に答える
5306 参照

python - セロリでは、特定のタスク名のすべてのタスクのタスクステータスを取得する方法は?

セロリでは、特定のタスク名のすべてのタスクのタスク ステータスを取得したいと考えています。そのために、以下のコードを試しました。

今、このコードで空のリストを取得しています。

0 投票する
2 に答える
13564 参照

rabbitmq - 再起動時に既に使用している pidbox で、Celery ノードが失敗する

私はRabbitMQブローカーでCeleryを実行しています。今日、Celery ノードに障害が発生しました。タスクを実行せず、service celeryd stopコマンドに応答しません。数回繰り返した後、ノードは停止しましたが、開始時に次のメッセージが表示されます。

プロセスメールボックスのロックを解除する方法を提案できますか?

0 投票する
0 に答える
939 参照

python - Celery ワーク プロセスは、数日間実行した後、100% の CPU を消費します

Celery プロジェクトに 1 つの問題を提出しました。詳細はこちらを参照してください: Celery worker process CPU 100%

Celery ワーカー プロセスを数日間実行した後、Python プロセスが 100% の CPU 負荷を消費することがわかりました。strace を使用してランタイム スタックトレースをダンプしたところ、CPU 100% プロセスが継続的にプールおよび読み取りを行っていることがわかりました。これは、Consumer.consume_message に関連付けられている必要があります。

誰にもアイデアがありますか?

0 投票する
1 に答える
313 参照

python - セロリワーカーの起動時にDjangoモデルがロードされない

Django-Celery 3.0.23 を使用しています。

コマンドを実行するpython manage.py celery workerと、モデルがすぐにロードされません。

これは、 に見られるように逆python manage.py celerydです。

これをテストするために、print ステートメントをmodels.py.

celerydの古いコマンドであると読みましたcelery worker

私はジャンゴセロリを使用するのが初めてです。何か不足していますか?

0 投票する
0 に答える
1484 参照

python - 長時間実行タスク用の Python Celery の構成

AWS スポット インスタンスで長いべき等タスクを実行するセットアップがありますが、タスクの途中で強制終了されたワーカーをエレガントに処理するように Celery をセットアップする方法がわかりません。

現時点でワーカーが強制終了された場合、タスクは失敗としてマークされます (WorkerLostError)。この件に関するドキュメントは少し無駄が多いことがわかりましたが、このシナリオでは CELERY_ACKS_LATE を使用することをお勧めします。これはうまくいきません。タスクはまだ失敗としてマークされています。

私が CELERY_ACKS_LATE=False を持っていたとき、タスクは保留中のままだったので、少なくとも今は失敗したことがわかります。これは良いスタートです。

現時点での私の構成設定は次のとおりです。

未処理のタスクの結果をチェックし、ローカル データベースの更新を処理してタスクを完了としてマークする (そして結果を使用して作業を実行する) マスター サーバー上で回転するタスクがあります。この段階で、「ワーカーが途中で終了しました: シグナル 15 (SIGTERM)」というシナリオをキャッチして、タスクを再試行する必要があると思います。

これはすべてセロリで処理する必要があるように感じるので、構成で基本的なものを見逃しているように感じます。

失敗する冪等のタスクとワーカーがある場合、これらのタスクが別のワーカーによって取得されるようにセロリを構成する最良の方法は何ですか?

0 投票する
1 に答える
198 参照

python - Celery: Python タスクからキューを選択的にクリアする

偶発的な不要なタスクで Celery キューが蓄積され、サーバーが詰まる状況が時々あります。たとえば、コードは 1 ではなく 20 000 のタスクを実行します。

Celeryキューに含まれるPythonタスクを調べて、特定のタスクを選択的に取り除くにはどうすればよいですか?

タスクは、標準の Celery デコレーターで定義および開始されます (問題がある場合)。

スタック: Django + セロリ + RabbitMQ。

0 投票する
0 に答える
523 参照

python - ホストではなく複数のタスクへの Celery ルーティング

Golang (redis を使用) から書いたアプリケーションを Python に移植する作業を行っています。Celery を使用してタスクのキューイングを実行したいと思っていますが、ルーティングに関して質問があります...

私のアプリケーションは、REST POST を介して「イベント」を受け取ります。各「イベント」は異なるタイプにすることができます。次に、バックグラウンドでワーカーに特定のタイプのイベントを待機させたいと考えています。ここでの注意点は、1 つのイベントが、そのイベントを処理する複数のタスクになる可能性があることです。例えば:

some/lib/a/tasks.py

some/lib/b/tasks.py

要約すると... N 個のワーカーを (X 個のマシンで) 実行できるようにしたいのですが、これらの各作業には、a.handle_event_typeA、b.handle_event_typeA などのように Y 個のタスクが登録されます。 . タスクをキューに挿入し、1 つのワーカーにそのタスクをピックアップさせ、ワーカー内の複数のタスク (つまり、a.handle_event_typeA と b.handle_event_typeA の両方) にルーティングできるようにしたいと考えています。

ここの昆布のドキュメントとここのセロリのルーティングのドキュメントを読みましたが、これを正しく構成する方法がわかりません。

私は以前から、従来のワークフローに Celery を使用してきましたが、その機能セット、パフォーマンス、および安定性に非常に満足しています。Kombuを直接使用するか、自作ソリューションを使用して必要なものを実装しますが、可能であればCeleryを使用したいと思います.

みんなありがとう!この質問で誰かの時間を無駄にしないことを願っています。

編集 1

この問題についてもう少し考えた後、Celery で必要なものを実装するための回避策を考え出しました。これは最も洗練されたソリューションではありませんが、うまく機能しています。私はdjangoを使用しており、キャッシュの抽象化です(代わりにmemcachedやredisなどを直接使用できます)。これが私が思いついたスニペットです:

次に、次のようにして、さまざまなモジュールのタスクをサブスクライブします。

次に、REST イベントを処理するときにパブリッシュ タスク メソッドを呼び出すことができます。

0 投票する
2 に答える
6745 参照

django - セロリdjangoデーモンの複数のワーカーと複数のキュー

サイトのバックエンドでタスクをキューに入れるために celery-django を使用しています。「low」と「high」という名前の 2 つのキューと、2 つのワーカー W1 と W2 を持つセットアップを作成しようとしています。次の方法でキューからタスクを消費するようにします。

W1 <-- 低、高

W2 <-- 高

通常はこのようにできます。

ターミナル 1 を開き、$ を入力しますcelery worker -n W1 -Q low,high

ターミナル 2 を開き、$ を入力しますcelery worker -n W2 -Q high

ただし、 celeryd daemonを介して同じことをしようとしています。

リンクに記載されている手順に従っています: http://celery.readthedocs.org/en/latest/tutorials/daemonizing.html#example-configuration しかし、利用可能なオプションは要件を満たすのに十分ではないようです。

それを可能にする可能性のある、私が知らないいくつかの設定を手伝ってください。本当に必要な場合を除き、複数のデーモンを実行したり、supervisord などの追加ツールを使用したりしないことをお勧めします (これについてもアドバイスをいただけないでしょうか)。