2010-12-02 12 views
11

タスク(task_id)がまだ処理されているかどうかを確認するにはcelery?私は、次のシナリオがあります。セロリタスクがまだ処理されているかどうかをテストします

  1. がセッション
  2. シャットダウンセロリデーモン(ハード)でDjangoのビュー
  3. ストアBaseAsyncResultでタスクを開始するので、タスクは
  4. チェックすると、もはや処理されませんタスクは「死んでいる」

アイデアがありますか?セロリで処理されているすべてのタスクを参照して、鉱山がまだ存在するかどうかを調べることはできますか?あなたのタスクは、あなたがセロリのタスクのために特別に作成する必要があるすべてのモデルに固有のものではない場合

class YourModel(models.Model): 
    . 
    . 
    celery_task = PickledObjectField() 
    . 
    . 

    def task(): 
     self.celery_task = SubmitTask.apply_async(args = self.task_detail()) 
     self.save() 

+1

にちょっと私もこれに似た何かを探しています、あなたをした:たとえば、ケースであなたは、タスク(並列)のグループが完了したかどうかを確認したかったですこれを解決するまでに至りましたか? djangoのキャッシュフレームワークにtask_idを格納するかどうかは不思議です。私は、このようなものをhttp://dpaste.com/370419/のように使用して、タスクのステータスを取得できることを知っています。しかし、データベース、タスクIDを格納するためにキャッシュを使用する間に混乱しています。 – Chantz

答えて

3

はセロリのタスクを保存するために、モデル内のフィールド(PickledObjectField)を定義します。

それ以外の場合は、django-celeryを使用することをおすすめします。これは素晴らしい監視機能を持っています:
http://ask.github.com/celery/userguide/monitoring.html#django-admin-monitorは素晴らしいグラフィック形式でタスクの詳細をdjangoモデルに保存します。

+0

はい、私はdjango-celeryを使い、状態を取得するために内部TaskMetaモデルのルックアップを行います。答えをありがとう。 –

0

私はモデルにタスクオブジェクトを格納するよりも良い方法があると思います。

# in the script you launch the task 
from celery import group 

job = group(
    task1.s(param1, param2), 
    task2.s(param3, param4) 
) 
result = job.apply_async() 
result.save() 

# save the result ID in your model 
your_obj_model = YourModel.objects.get(id='1234') 
your_obj_model.task_id = result.id 
your_obj_model.save() 

を次に、あなたのビュー

from celery.result import GroupResult 
# ... 
task_result = GroupResult.restore(your_obj_model.task_id) 
task_finished = task_result.ready() 
# will be True or False 
関連する問題