私は現在、セロリでDjangoをテストしています。
次のタスク追加を実行するために、定期的なタスクが crontab でセットアップされます。
from __future__ import absolute_import
from celery import task
import time
@task
def add(x, y):
print "Start : %s" % time.ctime()
time.sleep(120)
print "End : %s" % time.ctime()
return x + y
モデル:
from django.db import models
from djcelery.models import CrontabSchedule
from djcelery.models import TaskState
class Manager(models.Model):
cron = models.ForeignKey(CrontabSchedule)
def app_status(self):
return self.cron.schedule.app.tasks
app_status.admin_order_field = 'app status'
ここで、現在または最後のタスクの状態にアクセスできるようにしたいと考えています。Django シェルを使用すると、次のものを取得できます。
>>> import django
>>> from extractionapp.models import Manager
>>> Manager.objects.all()[0].app_status()
{'celery.chain': <@task: celery.chain of proj:0x1022f1a90>, 'celery.chord': <@task: celery.chord of proj:0x1022f1a90>, 'proj.celery.debug_task': <@task: proj.celery.debug_task of proj:0x1022f1a90>, 'celery.chunks': <@task: celery.chunks of proj:0x1022f1a90>, 'celery.chord_unlock': <@task: celery.chord_unlock of proj:0x1022f1a90>, 'celery.group': <@task: celery.group of proj:0x1022f1a90>, 'celery.backend_cleanup': <@task: celery.backend_cleanup of proj:0x1022f1a90>, 'celery.map': <@task: celery.map of proj:0x1022f1a90>, 'celery.starmap': <@task: celery.starmap of proj:0x1022f1a90>}
ただし、これから追加タスクにアクセスすることはできません。その状態にもアクセスできません。名前でタスクを呼び出しても機能しません。
Manager.objects.all()[0].app_status()['extractionapp.tasks.add'] トレースバック (最新の呼び出しが最後): ファイル ""、1 行目、ファイル "/Users/antoinebrunel/seo/lib/ python2.7/site-packages/celery/app/registry.py"、26 行目、 Raise self.NotRegistered(key) NotRegistered: 'extractionapp.tasks.add'が欠落している
では、cron に割り当てられている現在のタスクの状態にアクセスするにはどうすればよいでしょうか? 管理者から Home › Djcelery › Tasks で確認できますが、コードからそれを取得するにはどうすればよいですか?
どうもありがとう!