2016-11-09 6 views
0

달성하려는 목표 데이터베이스를 사용하여 유사한 작업을 다른 타이밍으로 예약하는 스케줄러를 작성하십시오. 있는 사전을 만드는, 셀러리 스케줄러 - 데이터 저장소 에서 모든 작업을 읽기 -셀 룰리 비트를 사용하는 여러 타이밍에서 작업 예약 (임의의 매개 변수 사용)

내가 셀러리 비트를 사용하고 같은 경우, 코드는 아래 때문에 이러한 세 단계 는 아이디어를

try: 
    reader = MongoReader() 
except: 
    raise 
try: 
    tasks = reader.get_scheduled_tasks() 
except: 
    raise 
celerybeat_schedule = dict() 
for task in tasks: 
    celerybeat_schedule[task["task_id"]] =dict() 
    celerybeat_schedule[task["task_id"]]["task"] = task["task_name"] 
    celerybeat_schedule[task["task_id"]]["args"] = (task,) 
    celerybeat_schedule[task["task_id"]]["schedule"] = get_task_schedule(task) 

app.conf.update(BROKER_URL=rabbit_mq_endpoint, CELERY_TASK_SERIALIZER='json', CELERY_ACCEPT_CONTENT=['json'], CELERYBEAT_SCHEDULE=celerybeat_schedule) 

을 줄 것이다 셀러리 구성

예상 시나리오 주어진 모든 ENTR와이 업데이트 - 속성, 작업 _ (실행됩니다 방법), 매개 변수를 가진 모든 작업에 의해 채워 일정 (저장시 실행), (데이터는 방법에 전달할) 이거 그냥 인쇄, 같은 일정을 인쇄 할 것을 지정하는 다른 매개 변수를 가지고, 5 분마다 실행되어야하는 동일한 셀러리 작업 이름을 실행 DB를

task name  , parameter , schedule 
regular_print , Hi  , {"minutes" : 5} 
regular_print , Hello  , {"minutes" : 5} 
regular_print , Bye  , {"minutes" : 5} 

내가 기대, 이들 5 분마다 인쇄해야합니다 말할 수 ,

이 도와주세요 (확실하지 순서 무작위 수) 미리 감사 :)

답변

0

W를 세 안녕, 안녕의 하나 어떻게됩니까

, 안녕 인쇄물을 인쇄 셀러리 버전 4를 사용하여이를 해결할 수 있습니다. 나를 위해 일한 것과 비슷한 샘플 .. 버전 4의 셀러리 문서에서 찾을 수 있습니다

#taking address and user-pass from environment(you can mention direct values) 
    ex_host_queue = os.environ["EX_HOST_QUEUE"] 
    ex_port_queue = os.environ["EX_PORT_QUEUE"] 
    ex_user_queue = os.environ["EX_USERID_QUEUE"] 
    ex_pass_queue = os.environ["EX_PASSWORD_QUEUE"] 
    broker= "amqp://"+ex_user_queue+":"+ex_pass_queue+"@"+ex_host_queue+":"+ex_port_queue+"//" 

    #celery initialization 
    app = Celery(__name__,backend=broker, broker=broker) 
    app.conf.task_default_queue = 'scheduler_queue' 
    app.conf.update(
     task_serializer='json', 
     accept_content=['json'], # Ignore other content 
     result_serializer='json' 
    ) 
task = {"task_id":1,"a":10,"b":20} 
##method to update scheduler 
def add_scheduled_task(task): 
    print("scheduling task") 
    del task["_id"] 
    print("adding task_id") 
    name = task["task_name"] 
    app.add_periodic_task(timedelta(minutes=1),add.s(task), name = task["task_id"])  

@app.task(name='scheduler_task') 
def scheduler_task(data): 
    print(str(data["a"]+data["b"]))