我正在尝试使用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'
但它没有帮助。
答案 0 :(得分:0)
似乎我需要输入我的settings.py
文件:
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
然后它工作正常。