Celery PeriodicTask不会过期

时间:2013-07-09 21:45:23

标签: django celery django-celery

我正在尝试设置定期任务,该任务应在一段时间后过期。我正在使用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秒一次)但是我从那时起就无法重现它。

有人能说清楚我做错了吗? 谢谢!

2 个答案:

答案 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

我提交了一个错误:https://github.com/celery/celery/issues/2283