Installation
============
- Install the latest version with pip::
$ pip install django-q
- Add :mod:`django_q` to :const:`INSTALLED_APPS` in your projects :file:`settings.py`::
INSTALLED_APPS = (
# other apps
'django_q',
)
- Run Django migrations to create the database tables::
$ python manage.py migrate
- Make sure you have a `Redis `__ server running
somewhere
.. _configuration:
Configuration
-------------
Configuration is handled via the :const:`Q_ClUSTER` dictionary in your :file:`settings.py`
.. code:: python
# settings.py example
Q_CLUSTER = {
'name': 'myproject',
'workers': 8,
'recycle': 500,
'timeout': 60,
'compress': True,
'save_limit': 250,
'label': 'Django Q',
'redis': {
'host': '127.0.0.1',
'port': 6379,
'db': 0, }
}
name
~~~~
Used to differentiate between projects using the same Redis server. Defaults to ``'default'``.
This can be useful if you have several projects using the same Redis server.
.. note::
Tasks are encrypted. When a worker encounters a task it can not decrypt, it will be discarded.
workers
~~~~~~~
The number of workers to use in the cluster. Defaults to CPU count of the current host, but can be set to a custom number.
recycle
~~~~~~~
The number of tasks a worker will process before recycling . Useful to release memory resources on a regular basis. Defaults to ``500``.
timeout
~~~~~~~
The number of seconds a worker is allowed to spend on a task before it's terminated. Defaults to ``None``, meaning it will never time out.
Set this to something that makes sense for your project.
compress
~~~~~~~~
Compresses task packages to Redis. Useful for large payloads, but can add overhead when used with many small packages.
Defaults to ``False``
save_limit
~~~~~~~~~~
Limits the amount of successful tasks saved to Django.
- Set to ``0`` for unlimited.
- Set to ``-1`` for no success storage at all.
- Defaults to ``250``
- Failures are always saved.
label
~~~~~
The label used for the Django Admin page. Defaults to ``'Django Q'``
redis
~~~~~
Connection settings for Redis. Defaults::
redis: {
'host': 'localhost',
'port': 6379,
'db': 0,
'password': None,
'socket_timeout': None,
'charset': 'utf-8',
'errors': 'strict',
'unix_socket_path': None
}
For more information on these settings please refer to the `Redis-py `__ documentation
.. _django_redis:
django_redis
~~~~~~~~~~~~
If you are already using `django-redis `__ for your caching, you can take advantage of its excellent connection backend by supplying the name
of the cache connection you want to use::
# example django-redis connection
Q_CLUSTER = {
'name': 'DJRedis',
'workers': 4,
'timeout': 90,
'django_redis: 'default'
}
.. tip::
Django Q uses your :const:`SECRET_KEY` to encrypt task packages and prevent task crossover. So make sure you have it set up in your Django settings.
Requirements
------------
Django Q is tested for Python 2.7 and 3.4
- `Django `__
Django Q aims to use as much of Django's standard offerings as possible
The code is tested against Django version `1.7.8` and `1.8.2`.
- `Django-picklefield `__
Used to store args, kwargs and result objects in the database.
- `Redis-py `__
Andy McCurdy's excellent Redis python client.
- `Arrow `__
The scheduler uses Chris Smith's wonderful project to determine correct dates in the future.
- `Blessed `__
This feature-filled fork of Erik Rose's blessings project provides the terminal layout of the monitor.
.. tip::
Install the `Hiredis `__ parser::
$ pip install hiredis
This C library maintained by the core Redis team is faster than the standard PythonParser during high loads.