这是在刷新用户的访问令牌的情况下。假设我们有一个函数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
这可能有效,但是当消息代理仅用于安排所需的任务时,我感到非常麻烦。
答案 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'}
},
}