2012-04-16 3 views
0

셀러리 작업에 의해 질의 될 하드웨어 센서 노드를 분산 시켰습니다. 각 센서 노드는 최신 판독 값 및 구성 데이터를 보유하는 객체를 가지고 있습니다.모델 개체 당 샐러리 작업. 진행 상황을 추적하는 가장 깨끗한 방법

단일 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

의 (마지막 제외하고 시도)