0

セロリ タスクによって問い合わせられるハードウェア センサー ノードを分散しました。各センサー ノードには、最近の読み取り値と構成データを保持するオブジェクトが関連付けられています。

単一のセンサーノードに問い合わせる celery タスクが複数あることは決してありません。ただし、以前のリクエストからノードがまだ処理されている間に、リクエストがノードに問い合わせを行う可能性があります。

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

私が最初に考えたのは、タスクの開始時と終了時にモデル オブジェクトに task_in_progress のようなフラグを付けることです。

タスクの追跡をよりよく実現するために使用できるタスクのインスタンス化に何かありますか?

4

1 に答える 1

1

あなたが望むのは、特定のリソースでタスクをロックすることです。セロリには非常に良い例があります。

キャッシュ キーを使用してロックを保持することを提案する例を要約すると、タスクは開始前にロック キーをチェックし ("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

于 2012-04-16T22:44:46.347 に答える