2012-04-16 10 views
0

私はセロリのタスクによって質問されるハードウェアセンサーノードを分散させました。各センサノードには、最新の読み取り値と設定データを保持するオブジェクトが関連付けられています。モデルオブジェクトごとのセロリタスク。進行状況を追跡する最もクリーンな方法

1つのsensornodeを調べるセロリタスクを複数回実行することは決してありません。しかし、以前の要求から依然として作業が行われている間に、ノードに問い合わせるようにリクエストが来る可能性があります。

セロリドキュメントのいずれにおいても、この種のタスク追跡の例はありませんでした。しかし、私はそれをかなり一般的な要件と仮定します。

私の最初の考えは、task_in_progressのようなフラグでタスクの始めと終わりにモデルオブジェクトをマークすることでした。

私のタスクトラッキングをよりよく実現するために使用できるタスクインスタンシエーションには何かがありますか?

答えて

0

与えられたリソースでタスクをロックすることは、セロリの非常に良い例です。

例を要約すると、キャッシュキーを使用してロックを保持することが示唆されていますが、タスクはロックキーをチェックします(起動する前に "sensor - %(id)s"などのインスタンス固有のキャッシュキーを生成できます)キャッシュキーが設定されていない場合に限ります。

例。あなたはおそらく適切にロック解除を行うには本当に確認したい

def check_sensor(sensor_id): 
    if check_lock_from_cache(sensor_id): 
     ... handle the lock ... 
    else: 
     lock(sensor_id) 
     ... use the sensor ... 
     unlock(sensor_id) 

(最終的に除いてみてください)

ここセロリの例はhttp://ask.github.com/celery/cookbook/tasks.html#ensuring-a-task-is-only-executed-one-at-a-time

です
関連する問題