123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- =======================================================
- Example Celery project using a database message queue
- =======================================================
- Short instructions
- ==================
- Quick rundown of the tutorial::
- 1. Install the `ghettoq`_ plugin.
- $ pip install ghettoq
- $ celeryinit
- 2. Open up two terminals. In the first, run:
- $ celeryd --loglevel=INFO
- In the second you run the test program:
- $ python ./test.py
- Voila, you've executed some tasks!
- Instructions
- ============
- This example uses the database as a message queue (commonly called a "ghetto
- queue"). Excellent for testing, but not suitable for production
- installations.
- To try it out you have to install the `GhettoQ`_ package first::
- $ pip install ghettoq
- This package is an add-on to `Carrot`_; the messaging abstraction celery
- uses. The add-on enables the use of databases as message queues. Currently it
- supports `Redis`_ and relational databases via the Django ORM.
- .. _`ghettoq`: http://pypi.python.org/pypi/ghettoq
- .. _`Carrot`: http://pypi.python.org/pypi/carrot
- .. _`Redis`: http://code.google.com/p/redis/
- The provided `celeryconfig.py` configures the settings used to drive celery.
- Next we have to create the database tables by issuing the `celeryinit`
- command::
- $ celeryinit
- We're using SQLite3, so this creates a database file (`celery.db` as
- specified in the config file). SQLite is great, but when used in combination
- with Django it doesn't handle concurrency well. To protect your program from
- lock problems, celeryd will only spawn one worker process. With
- other database drivers you can specify as many worker processes as you want.
- With the setup done, let's run the worker::
- $ celeryd --loglevel=INFO
- You should see the worker starting up. As it will continue running in
- the foreground, we have to open up another terminal to run our test program::
- $ python test.py
- The test program simply runs the `add` task, which is a simple task adding
- numbers. You can also run the task manually if you want::
- >>> from tasks import add
- >>> result = add.delay(4, 4)
- >>> result.wait()
- 8
- Using Redis instead
- ===================
- To use redis instead, you have to configure the following directives in
- `celeryconfig.py`::
- CARROT_BACKEND = "ghettoq.taproot.Redis"
- BROKER_HOST = "localhost"
- BROKER_PORT = 6379
- Modules
- =======
- * celeryconfig.py
- The celery configuration module.
- * tasks.py
- Tasks are defined in this module. This module is automatically
- imported by the worker because it's listed in
- celeryconfig's `CELERY_IMPORTS` directive.
- * test.py
- Simple test program running tasks.
- More information
- ================
- http://celeryproject.org
|