2016-05-03 12 views
3

私は赤いセロリを使用しています。セロリの結果バックエンドが動作しているかどうかを確認する方法

現在のredisは、ブローカとして、結果バックエンドとして使用されます。

BROKER_TRANSPORT = 'redis' 
BROKER_URL = 'redis://domain:8888/0' 
CELERY_RESULT_BACKEND = 'redis://domain:8888/0' 

私は結果バックエンドを使用する利点は何いくつかの事

  1. をクリアしたいです。私はそれを使って何を得るのかを意味します。
  2. どうすればそのことがわかりますか?私は何かが赤目に格納されることを意味します。そのストレージは恒久的です。どのように私はそれをクエリできますか?そのストレージは、など
  3. 私はセロリの花とその結果バックエンドのもの

答えて

3

結果バックエンドを監視することができ、時間とともに成長することはありませんすべてのタスクから店の結果である、のように聞こえる正確に何です。

実際に値を返す次のタスクがあるとします。

@task 
def sum(x, y): 
    return x + y 

ある時点で、このタスクを呼び出します。結果のバックエンドがない場合、get()はエラーをスローします(または警告、私は忘れてしまいます)。結果のバックエンドがあり(正しく設定されていると仮定した場合)、task.get()は、task_idの結果をtaskに関連付けて、redis-backendをポーリングし、指定したシリアライザを介して返信します。

from tasks import sum 

task = sum.delay(3, 4) 
task.get() 

あなたはそれだけでget()を呼び出し(および完了まで待って)あなたはブローカーにオフに送信したタスク上で動作することを確認することができます。 celery results from the official documentationでの作業の詳細を読むことができます。

redis-cliからredisデータベースをポーリングすることは原則可能ですが、理由はありません。実際のタスク詳細ビューの1つに行き、「基本タスクオプション」テーブルの下の「結果」フィールドをチェックすることで、花の中の結果を見ることができます。例えばhttp://flower.myserver.com/task/

+0

ありがとう、私はそれを得た。私には分かりませんが、セールスはどこにあるのですか?task_idのようなすべての情報を保管しています。その作業者はそのタスクを実行しました。それはRedisに入りますか?その情報は永久的ですか?>私がセロリの花を再起動すると、タスクタブのすべてのタスクがなくなったことがわかります。情報が永続的でないように見える – Karl

+0

はい、すべてブローカに格納されています。あなたの特定のケースでは、メモリ内のデータベースであるredis-databaseと思われます。この情報は実際に永続的ではありません(設計上!)あなたのredisデータベースを永続化したい場合は、[redis-peristenceに関するredis-documentation]からその方法をお読みください(http://redis.io/topics/永続性)。永続性がユースケースの大きな部分を占める場合、RabbitMQなどのより堅牢なブローカを調べることができますが、これは関与しているが、突然のシャットダウン時にキュー内のデータを保持できるようにします。 – Thtu

+0

あなたは、タスクの実行ステータスをデータベースのタスク実行コードに手動で保存して、何が起きているのかを完全に把握できると思いますか?その場合、ログメッセージからtask_idを確認する必要がある場合は、 、データベースからの直接の結果など – Karl

関連する問題