我正在尝试设置一个周期性任务,该任务将在一段时间后过期。我用的是Django 1.5.1、芹菜3.0.19和Django芹菜3.0.17(从pip开始的所有东西)。这是创建任务的摘录代码:
from django.utils import timezone
from datetime import timedelta, datetime
from djcelery.models import PeriodicTask, IntervalSchedule
interval = IntervalSchedule.objects.get(pk=1) # Added through fixture - 3sec interval
expiration = timezone.now() + timedelta(seconds=10)
task = PeriodicTask(name='fill_%d' % profile.id,
task='fill_album',
args=[instance.id],
interval=interval,
expires=expiration) task.save()
我正在用./manage.py celeryd -B
运行芹菜
该任务创建得很好,beat每3秒运行一次,但10秒后它不会过期。起初,我认为django和芹菜之间存在时区问题,所以我让它运行了3个小时(与UTC的差异),但它仍然不会过期。
在我的测试中,我实际上已经成功地使它过期了一次(记录器每3秒重复一次它过期了),但从那以后我就再也无法复制它了。
有人能告诉我我做错了什么吗?谢谢
我也遇到了同样的问题,我认为芹菜节拍没有兑现到期。如果您在任务中设置了断点,请查看current_task.request对象,看看expires是否有值(或者只从任务中打印current_task_request)
对我来说,如果我手动运行任务,current_task.request.expires有一个值,但如果celebeat调度它,则为None。
我用的是芹菜3.1.11
我提交了一个错误:https://github.com/celery/celery/issues/2283
您可以尝试将last_run_at
用作:
task = PeriodicTask(name='fill_%d' % profile.id,
task='fill_album',
args=[instance.id],
interval=interval,
expires=expiration,
last_run_at=expiration)
task.save()