問題タブ [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 - RabbitMQ を使用した celeryd は「混合: 隣人を検索」でハングしますが、プレーンなセロリは機能します
celeryd と RabbitMQ で頭を壁にぶつけています。
チュートリアルのこの例は問題なく動作しています:
走る:
そして、私は出力を取得します:
これで、python repl からタスクを実行して結果を得ることができます。
しかし、celeryd をインストールすると、プロセスが混合ステップでハングアップします。
これが表示された後、出力はありません。
私の /etc/default/celeryd は次のようになります。
私はこれらのバージョンを使用しています:
Ubuntu 14.04 セロリ 3.1.16 (Cipater) celeryd 3.1.6-1ubuntu1 rabbitmq-server 3.2.4-1 Python 2.7.6
したがって、デーモン化せずに、セロリはそれ自体を初期化できますが、デーモン (celeryd) を使用すると、どうやら混合ステップでハングします。
一部のフォーラムでは、これは RabbitMQ がディスク容量の上限に達したときに発生する問題であると示唆しています。十分なディスクがあり、RabbitMQ 自身のログは問題を示していません。
python - Celery:異なるワーカーで異なる環境を分離する方法は?
特定の django サイト インスタンスのすべてのタスクを特定のキューにルーティングする必要があります。私のセットアップは次のとおりです。
- Django プロジェクト (1.7) を実行する複数の Web サーバー
- セロリワーカーを実行する1つのサーバー(3.1.7)
- 3 つの環境: 運用、ステージング、開発。各環境は
DJANGO_SETTINGS_MODULE
、異なるCELERY_DEFAULT_QUEUE
設定の異なる で実行されます。 - ブローカーとしての 1 つの redis インスタンス (すべて同じデータベース内)
「セロリ サーバー」で、スーパーバイザー (簡略化された conf) を介して複数のワーカー インスタンスを実行します。
これは、検査で機能します:
(名前は CELERY_DEFAULT_QUEUE の設定に合わせます)
website/celery.py
基本が含まれています(インポートはスキップされます):
したがって、開発設定で実行されている Web サーバーによって生成されたタスクは、development_queue
. ただし、タスクが別のキューまたは 3 つすべてによって処理されていることがわかりますが、これは問題です。
これがこれらのタスクを分離する良い方法であるという点で、私の期待は間違っていますか? ルーティングに関するすべてのドキュメントは、さまざまなタスクをさまざまなキューにルーティングすることに関するものですが、これは必要ありません。特定のサイト (環境) のすべてのタスクを特定のキューにルーティングする必要があります。これらの環境を分離するにはどうすればよいですか?
celery - セロリのワークフローで、関連のない謎の task_id が返されます。
次のようなかなり複雑なワークフロー(動的に構築される)があります。
)
どのセロリがこれに変わりますか:
コードの最後にあるタスクが「タスク」ヘッダーにプッシュされる方法に注意してください。私が読んだことから、これらのタスクはメインタスクヘッダーに保存され、コードヘッダーの実行が完了するまでキューに入れられません。
ワークフロー全体の task_id を表示しようとすると (ワークフロー内の task_id の 1 つになると予想されます)。
取得したこのタスク ID は、celery_taskmeta または celery_tasksetmeta に保存されません。ワークフロー内で実行されるタスクではありません (以下のワーカー ログを参照)。この task_id が何を表しているのか、実行中のタスクのいずれかにリンクできる場合はどうすればよいですか?
結果をたどり、ワークフロー内の各タスクの状態を表示できるようにしたいと考えています。ただし、返されたこのタスクIDは、どのタスクにも関連していないようです。以下はワーカー ログです。上に出力されたタスク ID がどこにも見つからないことがわかります。何か案は?ありがとう。
python - インポートされたデコレーターで app.task 関数をラップするときの Celery KeyError; インポートのみのエラー
レイアウトを考えると:
_server.py
そして起動celery -A background._server worker
で関数KeyError: u'generic.adder'
を呼び出そうとすると、Worker でが与えられますgeneric.adder
.delay(..)
加算器関数:
ファイルgeneric.py
..インスタンスを受け取り、Celery app
Task の入出力を結果と関数を返す JSON オブジェクトに標準化する関数でラップされます。(以下に含まれます)しかし、問題は、このラッパー関数がgeneric.adderと同じファイルにある場合、問題なく動作することです-上記のようにインポートして使用すると、キーエラーがスローされます。
ラッパーが関数名でname=..
渡された属性を何らかの方法で変更しているため、タスクからアクセスしたときにのリテラル名が見つからないことが原因であると私は信じています。app.task
helpers.py
generic.adder
adder(..)
また、内部_server.py
(セロリ CLI から実行されるモジュール)から呼び出しようとすると、問題なく動作することに注意することも重要です。エラーがスローされるのは、分散インターフェイスを介して呼び出された場合のみです。つまり、インポートはセロリとは無関係に機能します。
ファイルhelpers.py
ファイル_server.py
django - 本番環境で実行されていないセロリ
本番環境でセロリとセロリビートを実行しようとしています。現在の django アプリでは、コマンド「celery -A Gorgon worker」および「celery -A Gorgon Beat -l debug --max-interval=10」を使用してテストおよび実行できます。また、virtualenv を介して実行しています。また、タスク ブローカーとして redis を使用しています。
アプリ全体が gunicorn サーバー上で実行されています。しかし、プロセスをデーモン化しようとすると、111 接続エラーで失敗します。
https://github.com/celery/celery/tree/3.0/extra/generic-init.dから必要なスクリプトをディレクトリ /etc/init.d に追加しました
/etc/defaults 内のスクリプトについては、次のようになります。
私のcelerydスクリプトは次のとおりです
私のセロリビートスクリプトは
/home/ubuntu/sites/virtualenv の現在の仮想環境を使用して、セロリのセットアップをデーモンとして実行するにはどうすればよいですか
django - セロリでチェーンを送信するときに AsyncResult から task_name を取得します
タスクのオブジェクトを取得し、その結果、タスクの名前を取得するにはどうすればよいですか?AsyncResult
id
たとえば、2 つのタスクをチェーンで起動するとします。
次のような内部メソッドを使用してid
、task_Bとその結果としてtask_Aを取得できます。_parents()
ただし、task_name を取得しようとすると、何も返されません。
なぜこうなった?これはおそらくバグでしょうか?task_name
単一のタスクを送信すると、 の属性がAsyncResult
完全に正常に機能し、適切なタスク名が返されることに気付きました。
AsyncResult オブジェクトからタスクの名前を取得する他の方法はありますか?
よろしくお願いします。
PS私はすでに同様の質問をここで見つけましたが、誰も実用的で実用的な解決策を提案していないようです.
アップデート
どうやらこれで壁にぶち当たったようです。まったく同じ問題について、チェーンではなくグループに関係するという違いについて、github にオープン チケットがあります。