我指的是Django Celery文件。在DB-Django中保存芹菜任务
我在我的proj/proj
中创建了celery.py
,正如文档所述。然后包括__init__.py
celery.py
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
app = Celery('proj')
app.conf.update(
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
)
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
__init__.py
from __future__ import absolute_import
from .celery import app as celery_app
我安装pip install django-celery
,然后迁移python manage.py migrate djcelery
它在我的数据库做一些表。
tasks.py
from __future__ import absolute_import
from celery import shared_task
import requests
import json
@shared_task
def post_notification(data,url):
headers = {'content-type': 'application/json'}
requests.post(url, data=json.dumps(data), headers=headers)
之后,我打电话给我的任务,我的意见,
task = post_notification.delay(data,url)
print task.id #it prints an id
print task.status # prints PENDING
但没有被登录到我的任何表。
我读过我的线索上,Thread1,Thread2和更多的这些线程上给出,但没有任何反应。
它提供了我的ID &状态的任务,但如何将任务保存在数据库中?通常它应该登录到celery_taskmeta
,但那里没有东西。
虽然任务得到执行,但我想将任务保存在数据库中。我该怎么做?有什么我失踪?
你不应该这样评估'app.conf'('app.conf.update'),因为它会提前加载django设置模块。您应该在settings.py中设置'CELERY_RESULT_BACKEND'设置。你还记得添加'djcelery'到INSTALLED_APPS吗?如果你想设置后端作为默认设置,那么你可以使用'app = Celery(...,backend ='djcelery.backends.database:DatabaseBackend')。请注意,只有当工作人员写入重试/失败/成功状态时,结果才会更新,并且PENDING状态不会保存到数据库中,而是所有未知ID都将处于PENDING状态。 – asksol