' django-celery

时间:2016-09-28 14:15:57

标签: django celery

我正在尝试使用django-celery运行异步任务,我不确定为什么它会继续出现此错误。

所以,我的设置如下:

我已安装redis作为消息服务,我可以验证它是否正在运行。我的settings.py文件包含以下与django-celery相关的行:

import djcelery
# Setup celery
djcelery.setup_loader()

BROKER_URL = 'redis://localhost:6379/0'
CELERY_IMPORTS = ("myproject.tasks", )

我让芹菜工人跑步:

python manage.py celery worker --loglevel=info -E -B

返回

 -------------- celery@gsp v3.1.23 (Cipater)
---- **** ----- 
--- * ***  * -- Linux-4.4.0-38-generic-x86_64-with-debian-stretch-sid
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         default:0x7f8aab484da0 (djcelery.loaders.DjangoLoader)
- ** ---------- .> transport:   redis://localhost:6379/0
- ** ---------- .> results:     
- *** --- * --- .> concurrency: 12 (prefork)
-- ******* ---- 
--- ***** ----- [queues]
 -------------- .> celery           exchange=celery(direct) key=celery


[tasks]
  . myproject.tasks.add
  . myproject.tasks.generate_cbf_maps
  . myproject.tasks.sleeptask

其中一个模型定义为:

class LabelModel(models.Model):
    image = models.FileField(upload_to='documents/label',
                             db_column='path', default='Some Value')

这被另一个模型称为:

class Document(models.Model):
    labelled_image = models.ForeignKey(LabelModel, db_column='label')

现在,其中一个芹菜任务被定义为:

@celery.task
def generate_cbf_maps(document_id):
    obj = Document.objects.get(pk=document_id)

当我从我的视图中调用它时,它使用myproject.myapp.models.DoesNotExist: Document matching query does not exist.进行barfs。如果我查看sqlite3数据库,我可以看到这个键存在,但不知怎的,它无法找到它。

此外,如果我只是在view中执行此操作,那很好。所以像这样的电话:

obj = Document.objects.get(pk=document_id)

这在我的views.py文件中很好,但是当我从芹菜任务中调用它时,它不起作用。

我不确定是否必须做一些事情来配置这个所谓的结果代理。我尝试过这样的事情:

CELERY_RESULT_BACKEND = 'redis'

但它没有帮助。

1 个答案:

答案 0 :(得分:0)

似乎我需要输入我的settings.py文件:

CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

然后它工作正常。