Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
python:celery [2015/06/22 13:16]
vondra [Instalation]
python:celery [2015/06/22 16:13] (current)
vondra [Instalation]
Line 9: Line 9:
 </​code>​ </​code>​
   - Install Celery <​code>​   - Install Celery <​code>​
-sudo pip install Celery+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>​ </​code>​
 
python/celery.1434971762.txt.gz · Last modified: 2015/06/22 13:16 by vondra