芹菜周期任务不会过期



我正在尝试设置一个周期性任务,该任务将在一段时间后过期。我用的是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()

最新更新