2011-11-22 14 views
24

Tôi đã chiến đấu với tài liệu Django/Celery trong một thời gian và cần trợ giúp.Ví dụ về Django và Celery: Nhiệm vụ định kỳ

Tôi muốn có thể chạy Công việc định kỳ bằng django-cần tây. Tôi đã thấy trên internet (và tài liệu hướng dẫn) một số định dạng và lược đồ khác nhau về cách thức người ta nên đi về việc đạt được điều này bằng cách sử dụng Celery ...

Ai đó có thể giúp với một ví dụ cơ bản, hoạt động của việc tạo, đăng ký và thực hiện một nhiệm vụ định kỳ django-cần tây? Đặc biệt, tôi muốn biết liệu tôi có nên viết một nhiệm vụ mở rộng lớp PeriodicTask và đăng ký hay không, hoặc liệu tôi có nên sử dụng trang trí @periodic_task hay không hoặc liệu tôi có nên sử dụng trình trang trí @task hay không và sau đó thiết lập lịch biểu cho tác vụ chấp hành.

Tôi không quan tâm nếu cả ba cách đều có thể, nhưng tôi muốn xem ví dụ về ít nhất một cách hoạt động. Rất biết ơn sự giúp đỡ của bạn.

Trả lời

37

Có gì sai với 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() 

Bạn có thể viết các nhiệm vụ tương tự sử dụng một trang trí:

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

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

Các decorator syntax đơn giản cho phép bạn bật chức năng hiện có/nhiệm vụ vào một nhiệm vụ định kỳ mà không sửa đổi chúng trực tiếp.

Để thực hiện các tác vụ celerybeat must be running.

+0

Cảm ơn câu trả lời của bạn. Thật tốt khi biết chính xác người trang trí là gì và tại sao hai hình thức giống nhau tồn tại. Có đúng là tôi không phải đăng ký PeriodicTasks không? Tôi thấy ví dụ này khó tìm trong tài liệu và nó có thể làm với việc đơn giản hóa (như bạn đã làm ở trên). Cảm ơn một lần nữa. –

+0

Hey, đây là một ví dụ khác từ tài liệu: http://ask.github.com/celery/reference/celery.decorators.html Bạn không phải đăng ký rõ ràng tác vụ nếu bạn sử dụng trang trí. Nó khá giống với các tùy chọn bạn đã đăng ký templatetags và bộ lọc của bạn trong Django (https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#registering-the-tag), nếu bạn quen thuộc hơn với điều đó. – arie

+0

Cảm ơn bạn một lần nữa vì sự giúp đỡ của bạn. –