問題タブ [celery-task]
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 - タスク内からセロリタスクを失敗させる方法は?
状況によっては、そのタスク内からセロリ タスクを失敗させたいと考えています。私は次のことを試しました:
ただし、タスクは引き続き成功したと報告されます。
タスク sim.tasks.run_simulation[9235e3a7-c6d2-4219-bbc7-acf65c816e65] は 1.17847704887s で成功しました: False
タスクの実行中にのみ状態を変更できるようで、タスクが完了すると、セロリは状態を結果と見なすものに変更します(この質問を参照してください)。例外を発生させてタスクを失敗させることなく、タスクが失敗したことをセロリに返す方法はありますか?
python - セロリ労働者の変数共有の問題
プロジェクトでPythonとセロリを使用しています。プロジェクトには、2つのファイルがあります。
celeryconfig.py
およびexample.py
celeryconfig.pyで、 CELERYD_CONCURRENCYを2に設定しました。これは、タスクキュー内のタスクを2つの異なるプロセスに分散することを意味します。
Pythonコンソールから、次のコマンドを実行します。
これにより、2人のワーカーによって同時に実行される2つのタスクが作成されます。問題は、両方のワーカープロセスがタスク関数[ getDigest() ]を実行しているため、同じハッシュオブジェクト(md5)を使用しているように見えることです。以下に示すように、 celerydの出力はこれを確認します。
簡単にするために、hashlibのmd5オブジェクトを使用していますが、実際のプロジェクトでは、複数のプロセスからアクセスおよび変更できないオブジェクトを使用しています。これにより、ワーカーがクラッシュすることが予想されます。
それは質問を提起します:ワーカープロセスを初期化して独自の( md5)オブジェクトを使用するようにコードを変更するにはどうすればよいですか?現在、それらは同じオブジェクトを共有しているため、アプリケーションがクラッシュします。これは可能ですか?
heroku - Celery タスクの状態が更新されない
Celery をタスク キューとして使用する Django アプリで奇妙な問題が発生しています。
- 私はタスクを開始します。
- 実行中、タスクは update_state(...) を呼び出して、進行状況を示すようにタスクの状態を設定します。
- タスクが完了します。これをログで確認します。
ただし、このビュー (http://myapp/tasks/37d9a3ac-5bd2-4791-9729-2234ff3be762/status) は、タスクが完了してからかなりの時間、STALE の結果を返します。Redis とデータベースの両方をバックエンドとして使用して、これを再現できます。最終的にタスクの状態は正しく返されますが、ユーザーが何かを実行できるようになる前にタスクが完了したかどうかを UI がポーリングするため、アプリが実際に機能しなくなります。
編集: 私のアプリは Heroku にデプロイされています。Cedar は応答キャッシュを行うのだろうか??
何が起こっているのか分かりますか?
django - セロリタスクのカウントダウンをリセット
カウントダウン後にセロリタスクを実行する必要がありますが、特定の条件下でそのカウントダウンをリセットできます。たとえば、で呼び出したいのですが、タスクが実行される前に特定のイベントが発生apply_async
しcountdown=15
た場合は、そのカウントダウンを再び15秒に設定したいと思います。
ドキュメントとグーグルから、タスクIDを保存し、イベントが発生した場合にタスクを取り消して再作成することで、これを達成できると思います。もっとエレガントなアプローチがあるのではないかと思っていました。
python - python celerymax-tasks-per-child-setting default
私はセロリを使用しています が、セロリプロセスの一部でメモリ使用量が高くなるため、 max-tasks-per-child-settingを使用したいと思います。
変更する前にこの設定のデフォルト値を見つけようとしていますが、その情報が見つかりません。
ここを見ましたが、1
すべてのタスクを再開したくないので、設定したくありません。
python - セロリタスクのtask_idはどこに設定しますか?
task_idを自分のtask_idで設定する例を見つけるのに問題があります
これらの線に沿って何か...
django - CelerydWorkerはタスクの処理を停止します
私は2人の労働者と一緒に走っているセロリを持っていて、彼らを見ると、彼らがそれぞれ4つのタスクを受け入れ、それらを処理してから、タスクの処理を停止しているのがわかります。(これらのタスクは長時間実行され、処理に最大2分かかることに注意してください)。
celeryctlは、次の情報を提供します。
さらに、これが発生するたびに、ログに出力される最後のものは次のとおりです。
これが出力される直前にタスクも失敗しました。私のコードでは、呼び出したのは次のとおりです。
celerydを殺して(^ C、すぐに死んで、タスクを待たずに)再開すると、さらにいくつかのタスクで何も起こらなかったように続行し、再び死にます(常にcreate_pdf
タスクにあると思いますが、ログには次のように表示されます)このタスクは失敗し、問題なく再試行されます)
python - 返されたデータを使用したセロリタスク:間違って実行しているのか、それとも正しく実行しているのか?
セロリの使い方を学んでいます。これまでに学んだことから、(Flaskアプリケーションに)いくらか擬似コードの関数があります。
私はこれが正しくて最良であると100%確信しているわけではありませんが、今はうまくいきます。結果/返される行は、実行タスクがタスクを実行して待機する1つの「returned=run_task」である可能性があるようです。
私は方向のリファクタリングを考えていました-a)タスクを実行して結果を呼び出す関数にこれらの2行(結果/戻り値)をバンドルするか、b)「AsyncResult」をタスク自体に入れてその戻り値を取得します。
以前にこれをしたことがある人からのセロリの方法は何ですか?または、以前にセロリを微調整したことがある人からのフィードバックです。
python - Celery 2.6.0rc5 の使用中に TypeError が発生する
Celery 2.6.0rc5を使用していますが、次のエラーが発生します。
ほんの少し前に git から昆布とセロリの両方をプルredis-server
し、ブローカーとして (2:2.2.12-1build1) がインストールされたUbuntu 12.04 LTS でこれを試しています。
私の設定(celeryconfig.py
)は次のとおりです。
私のワーカー ( worker.py
) は:
でワーカーを実行し$ ./worker.py worker
、Python シェルから次のようにワーカーを呼び出すと、次のようになります。
ワーカーは上記のエラーを報告し、より長いエラーを報告し、最終的にはワーカーが次のように終了します。
ちなみに、$ ./worker.py shell
「import kombu; kombu. version」を実行して実行すると、2.2.2 が報告され、これが最新バージョンであることがわかります。他の誰かがこれに遭遇したことも注目に値するかもしれませんが、昆布を更新することで解決したようです.
これは私が想像できる最も単純なセロリ プロジェクトであるため、私はセロリに完全に慣れていません。これは開発バージョンです。ここからどこへ行くべきか少し困惑しています。
読んでくれてありがとう。
celery - チェーンの一部であるセロリの失敗したタスクの再試行
いくつかのタスクを実行するセロリ チェーンがあります。各タスクが失敗して再試行される可能性があります。簡単な例については、以下を参照してください。
そしてチェーン:
2 つのタスクを実行すると (何も失敗しないと仮定して)、次のように表示されます。
ただし、追加タスクが最初に失敗し、その後の再試行呼び出しが成功した場合、チェーン内の残りのタスクは実行されません。つまり、追加タスクが失敗し、チェーン内の他のすべてのタスクが実行されず、数秒後に、 add タスクが再度実行されて成功し、チェーン内の残りのタスク (この場合は mul.si(3, 4)) は実行されません。
セロリは、失敗したタスクから失敗したチェーンを継続する方法を提供しますか? そうでない場合、これを達成し、タスクが数回再試行された場合でも、チェーンのタスクが指定された順序で実行され、前のタスクが正常に実行された後にのみ実行されるようにするための最良のアプローチは何でしょうか?
注1:この問題は、次のようにすることで解決できます
しかし、チェーンが失敗したタスクで機能しない理由を理解することに興味があります。