28

我一直在与 Django/Celery 文档作斗争,现在需要一些帮助。

我希望能够使用 django-celery 运行定期任务。我在互联网(和文档)中看到了几种不同的格式和模式,说明应该如何使用 Celery 实现这一目标......

有人可以帮助创建、注册和执行 django-celery 定期任务的基本功能示例吗?特别是,我想知道我是否应该编写一个扩展 PeriodicTask 类的任务并注册它,或者我是否应该使用@periodic_task 装饰器,或者我是否应该使用@task 装饰器,然后为任务的执行。

我不介意这三种方式是否都可行,但我希望看到至少一种可行方式的示例。非常感谢您的帮助。

4

1 回答 1

40

文档中的示例有什么问题?

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():
    ....

装饰器语法仅允许您将现有函数/任务转换为周期性任务,而无需直接修改它们。

对于要执行的任务,celerybeat 必须正在运行

于 2011-11-22T11:25:44.020 回答