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
Last revision Both sides next revision
python:celery [2015/06/22 13:15]
vondra [Instalation]
python:celery [2015/06/22 16:08]
vondra [Django Integration]
Line 8: Line 8:
 pip install librabbitmq pip install librabbitmq
 </​code>​ </​code>​
-  - Install Celery+  - 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) 
 + 
 +===== 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.txt · Last modified: 2015/06/22 16:13 by vondra