我正在尝试设置定期任务,该任务应在一段时间后过期。我正在使用Django 1.5.1,芹菜3.0.19和django-celery 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
正在创建任务很好,并且每3秒运行一次,但是10秒后它不会过期。起初我认为这是django和芹菜之间的一些时区问题,所以我让它运行了3个小时(我与UTC的差异),但它仍然不会过期。
在我的测试过程中,我实际上设法让它过期了一次(并且记录器不断重复它已过期,每3秒一次)但是我从那时起就无法重现它。
有人能说清楚我做错了吗? 谢谢!
答案 0 :(得分:0)
您可以尝试使用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()
答案 1 :(得分:0)
我遇到了同样的问题,我认为芹菜殴打不是为了纪念到期。如果在任务中设置断点,请查看current_task.request对象,看看expires是否有值(或者只是从任务中打印current_task.request。)
对我来说,如果我手动运行任务,current_task.request.expires有一个值,但如果celery beat计划它,它就是None。
我正在使用芹菜3.1.11