我指的是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