- [Show page]
- [Old revisions]
- [[unknown link type]]
- []
Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
python:celery [2015/06/22 13:14] vondra |
python:celery [2015/06/22 16:13] (current) vondra [Instalation] |
||
---|---|---|---|
Line 5: | Line 5: | ||
===== Instalation ===== | ===== Instalation ===== | ||
- Install RabbitMQ: <code bash> | - 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> | </code> |
python/celery.1434971643.txt.gz · Last modified: 2015/06/22 13:14 by vondra