1

Django Celeryのドキュメントを参照しています。

ドキュメントが言ったようcelery.pyに、私は自分で作成しました。proj/projそして含まれる__init__.py

セロリ.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 ました。DBにいくつかのテーブルが作成されました。

タスク.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

しかし、私のテーブルには何もログインされません。

SO、Thread1Thread2など、これらのスレッドで指定された多くのスレッドを読みましたが、何も起こりません。

タスクの ID とステータスが表示されますが、タスクを DB に保存するにはどうすればよいですか? 通常は にログインする必要がありますcelery_taskmetaが、そこには何もありません。

タスクは実行されますが、DBにもタスクを保存したいと思います。どうすればいいですか?足りないものはありますか?

4

2 に答える 2

0

settings.py以下をファイルに追加

BROKER_URL = 'amqp://guest:guest@localhost//'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

そしてワーカーを起動します。

于 2014-02-17T10:02:37.537 に答える
0

celery.py でこれを試してください

from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
from celery.schedules import crontab

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app_name.dev_settings')

app = Celery('app_name')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
app.conf.CELERY_TIMEZONE = 'UTC'
app.conf.update(
    CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
)
于 2014-02-17T09:07:02.560 に答える