2012-08-12 5 views
2

는 질문이 게시 : How to execute a command at exact time once a day in Django?Django 응용 프로그램에서 셀러리를 사용하여 작업을 실행하는 방법은 무엇입니까?

나는 셀러리이 그것을 할 수있는 가장 쉬운 방법은 나의 대답을 가지고,하지만 지금은 셀러리에 대한 또 다른 질문이 : 나는에 대한 세 가지 질문이

from celery.schedules import crontab 

CELERYBEAT_SCHEDULE = { 
    # Executes every Monday morning at 7:30 A.M 
    'every-monday-morning': { 
     'task': 'tasks.add', 
     'schedule': crontab(hour=7, minute=30, day_of_week=1), 
     'args': (16, 16), 
    }, 
} 

을 위의 코드 예 :

  • 나는 execute_command(User, command) 메서드를 실행해야합니다. 이 메서드는 지정된 예약 된 시간에 실행됩니다.

  • 7:30 AM but every weekdays?에서 일정을 변경하려면 어떻게해야합니까?

  • args은 어떨까요? 제 경우에는 의 값을 args에서 전달해야합니다. 또는 단순히 task 키에서 전달할 수 있습니까?

나는 샐러리의 문서를 읽었지만 내 대답은 얻지 못했다. 도와 주시겠습니까?

답변

4

Celery periodic tasks documentation을 찾았습니까?

  • 스케줄러 항목을 등록하려면 메소드 식별자를 사용해야합니다. execute_command 작업이 foobar 모듈에있는 경우 CELERYBEAT_SCHEDULE 구조의 task 값은 foobar.execute_command이어야합니다.

    셀러리가 import foobar.execute_command을 제공한다면 작업을 가져옵니다.

  • celery.schedule.crontab API을 확인하십시오. 오전 7시 반에서 평일에 실행해야 다음

    crontab(minute=30, hour=7, day_of_week=’mon-fri’) 
    
  • 이 작업은 비동기 적으로 수행 할 것입니다 기억하십시오. 이 타스크를 스케줄 할 때 데이터베이스 오브젝트를 조회 할 수 없으며 타스크가 호출 될 때 여전히이 데이터베이스가 예상됩니다. 따라서

    만 일정하게 유지 파이썬 값을 전달해야하고, 당신의 작업은 데이터베이스에 연결하고 전달 인수에 따라 물건을 찾아 보게한다.

    을이 작업은 오직 실행려고하는 경우 특정 사용자에 대한 작업을 수행 한 다음 해당 사용자의 식별자 (사용자 아이디, 이메일, 데이터베이스에서 사용자를 찾는 데 사용할 수있는 것이면 무엇이든)를 전달하십시오.

관련 문제