Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django with芹菜:从正在进行的任务中获取状态_Django_Celery_Django Celery_Celery Task_Djcelery - Fatal编程技术网

Django with芹菜:从正在进行的任务中获取状态

Django with芹菜:从正在进行的任务中获取状态,django,celery,django-celery,celery-task,djcelery,Django,Celery,Django Celery,Celery Task,Djcelery,我现在正在用芹菜测试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 +

我现在正在用芹菜测试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 shell,我可以获得以下信息:

>>> 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>}
导入django >>>从extractionapp.models导入管理器 >>>Manager.objects.all()[0]。应用程序状态() {'celery.chain'、'celery.chord'、'proj.celery.debug_task'、'celery.chunks'、'celery.chord_unlock'、'celery.group'、'celery.backend_cleanup'、'celery.map'、'celery.starmap':} 但是,我无法从此访问添加任务,也无法访问其状态。 按任务名称调用任务也不起作用:

Manager.objects.all()[0].app_status()['extractionapp.tasks.add'] 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/Users/antoinebrunel/seo/lib/python2.7/site packages/芹菜/app/registry.py”,第26行,在中缺失 提升自我。未注册(密钥) NotRegistered:'extractionapp.tasks.add'

那么,如何访问分配给cron的当前任务的状态呢?我可以通过Home›djcellery›任务从管理员那里看到它,但是如何从代码中获得它呢

非常感谢

来自Django shell:

>>> from celery import Celery
>>> app = Celery('proj')
>>> i = app.control.inspect()
>>> i.active()
{u'celery@HeyHeyHey': [{u'args': u'[2, 2]', u'time_start': 448519.58944676, u'name': u'extractionapp.tasks.add', u'delivery_info': {u'priority': None, u'redelivered': False, u'routing_key': u'celery', u'exchange': u'celery'}, u'hostname': u'celery@HeyHeyHey', u'acknowledged': True, u'kwargs': u'{}', u'id': u'05fa4347-a222-45f3-9ee0-f3c261a21a24', u'worker_pid': 23999}]}
资料来源: