Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
python:celery [2015/06/22 13:12]
vondra created
python:celery [2015/06/22 16:13] (current)
vondra [Instalation]
Line 2: Line 2:
 http://​docs.celeryproject.org/​en/​latest/​ http://​docs.celeryproject.org/​en/​latest/​
  
 +
 +===== Instalation =====
 +  - Install RabbitMQ: <code bash>
 +aptitude install rabbitmq-server
 +pip install librabbitmq
 +</​code>​
 +  - Install Celery <​code>​
 +pip install celery
 +pip install django-celery
 +</​code>​
 +(note: make sure there is not south installed on your system when using django >= 1.7)
 +
 +if unable to start RabbitMQ and <​code>​ ERROR: epmd error for host address (cannot connect to host/​port)</​code>​
 +in /​var/​log/​rabbitmq/​startup_log,​ put your hostname in /etc/hosts after localhost
 +===== Django Integration =====
 +http://​celery.readthedocs.org/​en/​latest/​django/​first-steps-with-django.html
 +  - Create project celery config projectname/​celery.py:​ <code python>
 +from __future__ import absolute_import
 +
 +import os
 +
 +from celery import Celery
 +
 +# set the default Django settings module for the '​celery'​ program.
 +os.environ.setdefault('​DJANGO_SETTINGS_MODULE',​ '​celertest.settings'​)
 +
 +from django.conf import settings
 +
 +app = Celery('​celertest',​ broker='​amqp://​guest@localhost//'​)
 +
 +# 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.update(CELERY_RESULT_BACKEND='​djcelery.backends.database.DatabaseBackend'​)
 +
 +
 +@app.task(bind=True)
 +def debug_task(self):​
 +    print('​Request:​ {0!r}'​.format(self.request))
 +</​code>​
 +  - Create myapp/​tasks.py<​code python>
 +from __future__ import absolute_import
 +
 +from celery import shared_task
 +
 +
 +@shared_task
 +def add(x, y):
 +    return x + y
 +
 +
 +@shared_task
 +def mul(x, y):
 +    return x * y
 +
 +
 +@shared_task
 +def xsum(numbers):​
 +    return sum(numbers)
 +
 +
 +@shared_task
 +def gen_prime(x):​
 +    multiples = []
 +    results = []
 +    for i in xrange(2, x+1):
 +        if i not in multiples:
 +            results.append(i)
 +            for j in xrange(i*i, x+1, i):
 +                multiples.append(j)
 +    return results
 +</​code>​
 +  - Sync django db (./​manage.py syncdb ​ or ./manage.py makemigrations && migrate)
 +  - Add djcelery to INSTALLED_APPS and add following lines to project/​settings.py:<​code python>
 +CELERYBEAT_SCHEDULER = '​djcelery.schedulers.DatabaseScheduler'​
 +CELERY_RESULT_BACKEND = '​djcelery.backends.database:​DatabaseBackend'​
 +</​code>​
 +  - Run celery watcher: <code bash>​./​manage.py celeryd -E</​code>​
 +  - Optionaly: run celerycam and celerymon to enable the monitoring via DB:<code bash>
 +./manage.py celerycam
 +./manage.py celerymon
 +</​code>​
 
python/celery.1434971551.txt.gz · Last modified: 2015/06/22 13:12 by vondra