2011-11-22 2 views
24

나는 잠시 동안 장고/샐러리의 문서와 싸워 왔으며 도움이 필요하다.장고와 샐러리의 예 : 정기적 인 작업

django-celery를 사용하여 주기적 작업을 실행하고 싶습니다. 나는 인터넷 (및 문서) 여러 가지 형식과 셀러리를 사용하여 이것을 달성하는 방법에 대한 스키마를 본적이있다. 장고 - 샐러리 주기적 과제? 특히, PeriodicTask 클래스를 확장하는 작업을 작성해야하는지, 아니면 @periodic_task 데코레이터를 사용해야하는지, 아니면 @task 데코레이터를 사용해야하는지, 그리고 작업의 일정을 설정해야 하는지를 알고 싶습니다. 실행.

세 가지 방법 모두 가능하면 괜찮습니다.하지만 적어도 작동하는 한 가지 방법의 예를보고 싶습니다. 도움을 주셔서 감사합니다.

답변

37

example from the docs의 문제점은 무엇입니까?

from celery.task import PeriodicTask 
from clickmuncher.messaging import process_clicks 
from datetime import timedelta 


class ProcessClicksTask(PeriodicTask): 
    run_every = timedelta(minutes=30) 

    def run(self, **kwargs): 
     process_clicks() 

당신은 장식을 사용하여 동일한 작업을 작성할 수

from celery.task.schedules import crontab 
from celery.task import periodic_task 

@periodic_task(run_every=crontab(minute="*/30")) 
def process_clicks(): 
    .... 

decorator syntax은 단순히 당신이 직접 수정하지 않고 주기적 작업으로 기존 기능/작업을 끌 수 있습니다.

실행할 작업이 celerybeat must be running입니다.

+0

답변 해 주셔서 감사합니다. 데코레이터가 정확히 무엇인지, 왜 똑같은 두 가지 형태가 존재 하는지를 아는 것은 좋은 일입니다. PeriodicTasks를 등록 할 필요가 없다는 것이 맞습니까? 나는이 예제를 문서에서 찾기가 어렵다는 것을 알았고 단순화와 함께 할 수 있었다. 다시 한번 감사드립니다. –

+0

안녕하세요, 다음은 docs의 다른 예입니다. http://ask.github.com/celery/reference/celery.decorators.html 데코레이터를 사용하는 경우 작업을 명시 적으로 등록 할 필요가 없습니다. Django (https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#registering-the-tag)에서 templatetags 및 필터를 등록한 옵션과 매우 유사합니다. 더 익숙한. – arie

+0

다시 도움을 주셔서 감사합니다. –