为用户上一次刷新后9天的计划任务Django / Celery

时间:2019-03-29 17:02:04

标签: python django celery django-celery django-cron

这是在刷新用户的访问令牌的情况下。假设我们有一个函数refresh_user_token,它将一个CustomUser对象作为user

def refresh_user_token(user):
    ...
    ...
    return result

我希望针对特定的CustomUser每次执行此功能,以安排在9天内重复一次。

def refresh_user_token(user):
    ...
    ...
    next_refresh = datetime.now() + timedelta(days=9)
    schedule_refresh(user, scheduled_time=next_refresh)
    return result

我在Celery上看到的大多数用例都是关于执行批处理操作的,但是对于这种用法,我需要能够使用似乎不适用于Celery的参数执行函数。


有人确实建议设置cron作业,以检查是否需要在非常短的时间内刷新所有令牌。

因此,在CustomUser对象上,我们有一个名为DateTimeField的{​​{1}}。

last_token_refresh

这可能有效,但是当消息代理仅用于安排所需的任务时,我感到非常麻烦。

1 个答案:

答案 0 :(得分:-1)

您可以使用Celery Beat通过crontabs安排芹菜任务。只需创建常规的Celery任务,然后使用Beat即可说出运行时间。

这是我在一个项目中使用的Celery Beat设置的示例:

CELERY_BEAT_SCHEDULE = {
    'populate_controller': {
        'task': 'common.tasks.populate_controller',
        # Will be executed Mondays, at 08:30 
        'schedule': crontab(day_of_week=2, 
                            hour=8, 
                            minute=30),
    'options': {'queue': 'populate_controller'}
    },
 }