如何安排在每个月的特定日期运行的Celery任务?

时间:2012-04-06 07:37:34

标签: django celery django-celery

我尝试使用此solution,但没有成功。如何指定应执行任务的月份?我的解决方案是

class DayOfMonth(schedule):

    def __init__(self, day=1):
        self.day = day

    def is_due(self, last_run_at):
        now = datetime.datetime.now()
        if now.month != last_run_at.month and now.day == self.day:
            return True, 3000
        return False, 3000

    def __eq__(self, other):
            if isinstance(other, DayOfMonth):
                return self.day == other.day and self.month == other.month
            return False

我尝试使用django-celery运行它,但我仍然收到错误,指出run_every没有指定。

编辑1:

我执行任务添加:

"my_task": {
        "task": "util.tasks.CeleryManagementCommand",
        "schedule": DayOfMonth(day=4),
        "args": ('my_task',),
    },

CELERYBEAT_SHEDULE dict

编辑2:

当我在 init 中指定run_every时 - > self.run_every = None我收到一个错误,即无类型对象没有属性total_seconds

1 个答案:

答案 0 :(得分:1)

如果您是子类,并更改 init ,则最好确保调用父 init 。 我很确定这会解决你的问题:

class DayOfMonth(schedule):

    def __init__(self, day=1, *args, **kwargs):
        super(DayOfMonth, self).__init__(*args, **kwargs)
        self.day = day

如果你检查一下,它会揭示你遇到的错误: https://github.com/ask/celery/blob/master/celery/schedules.py#L33