2013-07-09 30 views
2

我试图设置一段时间后过期的周期性任务。我使用的是Django 1.5.1,celery 3.0.19和django-celery 3.0.17(一切都来自pip)。 这是摘录代码来创建任务:芹菜PeriodicTask不会过期

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

您可以尝试使用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() 
+0

我只是做THT,还是把 – Gabe

+0

尽量在1个天润芹菜没什么,如果任务将结束几个小时,这个问题后,与设置时区。如果我是对的,你应该重复检查与时区有关的设置。 –

0

我有同样的问题,我认为,芹菜拍不履行到期的。如果您在设置你的任务断点看看的current_task.request对象,看看是否过期有一个值(或只是打印current_task.request从任务中。)

对于我来说,如果我手动运行任务,current_task.request.expires有一个值,但是如果芹菜击败了它的时间表,它就是None。

我用芹菜3.1.11

我申请了一个错误:https://github.com/celery/celery/issues/2283