2013-07-09 5 views
2

Я пытаюсь настроить периодическую задачу, срок действия которой истекает через некоторое время. Я использую Django 1.5.1, celery 3.0.19 и django-celery 3.0.17 (все от пипса). Это отрывок кода для создания задачи:Сельдерей 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 секунд не истекает. Сначала я подумал, что это проблема часового пояса между джанго и сельдереем, поэтому я разрешил ей работать в течение 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 и посмотрите, имеет ли значение expires значение (или просто распечатайте current_task.request из задачи).

Для меня, если я вручную запускаю задачу , current_task.request.expires имеет значение, но если селекторный ритм разбивает его, то это None.

Я использую сельдерей 3.1.11

Я подал ошибку: https://github.com/celery/celery/issues/2283

Смежные вопросы