non è necessario il pacchetto django-celery e l’app djcelery per produzione perchè si usa rabbit, serve solo per dev. django-celery ha anche altre interessanti funzionalità per i crontab
docs ufficiale http://celery.readthedocs.org/en/latest/index.html
in requires di setup.py aggiungere:
'jmb.async',
'django-celery' # <-solo se in dev
in settings.py (per noi base.py):
INSTALLED_APPS = (
....
'jmb.async',
'kombu.transport.django',
'djcelery',
# <-solo se in dev o per crontab
)
in settings.dev:
import djcelery
djcelery.setup_loader()
mentre in produzione se si usa rabbitMQ leggete in fondo.
in buildout.cgf aggiungere:
[celery]
recipe = collective.recipe.celery
#broker-transport = sqlakombu.transport.Transport
#broker-host = sqlite:///celery_broker.db
#result-backend = database
#result-dburi = sqlite:///celery_results.db
imports = web.tasks
python = vpython
e sempre in buildout.cfg:
[buildout]
parts += celery
creare nella cartella web il file celery.py:
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'web.settings')
app = Celery('web', broker=settings.BROKER_URL)
# 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)
ricordarsi di lanciare nella shell:
dj sync && dj migrate
vedi qui come configurare async per dev o per prod Settings per avviare il servizio di celery lanciare:
bin/py bin/celery -A web worker -l info
su /admin/async/task/ puoi vedere un task. se si è in modalità debug, è abilitata l azione per creare un task di test per provare celery
Complimenti! ora puoi iniziare ad aggiungere un task link Creare un Task
In produzione usare rabbitmq
http://celery.readthedocs.org/en/latest/getting-started/first-steps-with-celery.html#rabbitmq
http://celery.readthedocs.org/en/latest/getting-started/brokers/rabbitmq.html
http://celery.readthedocs.org/en/latest/configuration.html#amqp-backend-settings
esempio di configurazione sostiuire ai parametri di dev questi nei settings.py:
BROKER_URL = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp'
CELERY_TASK_RESULT_EXPIRES = 18000 # 5 hours.