2013-07-09 59 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