首页 文章

芹菜的周期性任务已发送但尚未执行

提问于
浏览
2

我在我的一个 django 项目中使用 celery 来执行某些任务 . 我最近需要添加 periodic_task 来更新我的一个模型中的对象的字段 . 所以我添加了 periocdic_task 如下 .

import datetime
import logger.logger as logger

from celery.decorators import periodic_task



@periodic_task(run_every=datetime.timedelta(seconds=30))
def entries_about_to_expire():
   """ Changes the status of entries that are about to expire.
   """

   try:
       import entries.models as models
       startdate = datetime.datetime.today()
       enddate = startdate + datetime.timedelta(days=7)
       soon = models.EntryStatus.objects.get_or_create(
               name='Expiring Soon')[0]
       models.Entries.objects.filter(expiry_date__range=[startdate, enddate])\
               .update(status=soon)

   except Exception, err:
       logger.exception("Error while changing job status: %s" % (err))

我做的下一件事是按如下方式运行 celery

>>python manage.py celeryd -l info --beat

一切都运行良好,直到现在 . 我甚至可以看到芹菜发送的任务如下(根据需要每隔30秒发生一次) .

[2013-11-15 15:01:10,690: INFO/MainProcess] Scheduler: Sending due task entries.tasks.entries_about_to_expire (entries.tasks.entries_about_to_expire)

但由于某种原因,任务没有执行 . 我的意思是我找不到 Entries Entries 对象的任何变化 . 我用shell测试了这个 .

In [2]: from entries.models import Entries, EntryStatus

In [3]: soon = EntryStatus.objects.get_or_create(name='Expiring Soon')[0]

In [4]: entries = Entries.objects.filter(status=soon)

In [5]: entries
Out[5]: []

即使在多次发送任务后,我也会得到相同的结果 . 我确信 entries_about_to_expire 的代码运行正常,因为如果我手动调用它可以工作 . 例如,如果我在shell中执行以下操作

In [6]: from entries.tasks import entries_about_to_expire

In [7]: entries_about_to_expire()

In [8]: entries = Entries.objects.filter(status=soon)

In [9]: Entries
Out[9]: [<Entries: 223>, <Entries: 512>, <Entries: 526>, <Entries: 591>]

So why is the celery task is not executing ? any clues ?

注意:我也尝试了 celerybeat_schedule 方法,但结果相同,即任务已发送但未执行

1 回答

相关问题