| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 | 
							- =========================
 
-  First steps with Django
 
- =========================
 
- Using Celery with Django
 
- ========================
 
- To use Celery with your Django project you must first define
 
- an instance of the Celery library.
 
- If you have a modern Django project layout like
 
-     - proj/
 
-       - proj/__init__.py
 
-       - proj/settings.py
 
-       - proj/urls.py
 
-     - manage.py
 
- then the recommended way is to create a new `proj/proj/celery.py` module
 
- that defines the Celery instance:
 
- :file: `proj/proj/celery.py`
 
- .. code-block:: python
 
-     from celery import Celery
 
-     from django.conf import settings
 
-     celery = Celery('proj.celery')
 
-     celery.config_from_object(settings)
 
-     celery.autodiscover_tasks(settings.INSTALLED_APPS, related_name='tasks')
 
-     @celery.task(bind=True)
 
-     def debug_task(self):
 
-         print('Request: {0!r}'.format(self.request))
 
- Let's explain what happens here.
 
- First we create the Celery app instance:
 
- .. code-block:: python
 
-     celery = Celery('proj')
 
- Then we add the Django settings module as a configuration source
 
- for Celery.  This means that you don't have to use multiple
 
- configuration files, and instead configure Celery directly
 
- from the Django settings.
 
- .. code-block:: python
 
-     celery.config_from_object(settings)
 
- Next, a common practice for reusable apps is to define all tasks
 
- in a separate ``tasks.py`` module, and Celery does have a way to
 
- autodiscover these modules:
 
- .. code-block:: python
 
-     celery.autodiscover_tasks(settings.INSTALLED_APPS, related_name='tasks')
 
- With the line above Celery will automatically discover tasks in reusable
 
- apps if you follow the ``tasks.py`` convention::
 
-     - app1/
 
-         - app1/tasks.py
 
-         - app2/models.py
 
-     - app2/
 
-         - app2/tasks.py
 
-         - app2/models.py
 
- This way you do not have to manually add the individual modules
 
- to the :setting:`CELERY_IMPORTS` setting.
 
- Finally, the ``debug_task`` example is a task that dumps
 
- its own request information.  This is using the new ``bind=True`` task option
 
- introduced in Celery 3.1 to easily refer to the current task instance.
 
- The `celery` command
 
- --------------------
 
- To use the :program:`celery` command with Django you need to
 
- set up the :envvar:`DJANGO_SETTINGS_MODULE` environment variable:
 
- .. code-block:: bash
 
-     $ DJANGO_SETTINGS_MODULE='proj.settings' celery -A proj worker -l info
 
-     $ DJANGO_SETTINGS_MODULE='proj.settings' celery -A proj status
 
- If you find this inconvienient you can create a small wrapper script
 
- alongside ``manage.py`` that automatically binds to your app, e.g. ``proj/celery.py`
 
- :file:`proj/celery.py`
 
- .. code-block:: python
 
-     #!/usr/bin/env python
 
-     import os
 
-     from proj.celery import celery
 
-     if __name__ == '__main__':
 
-         os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.celery')
 
-         celery.start()
 
- Then you can use this command directly:
 
- .. code-block:: bash
 
-     $ ./celery.py status
 
- Using the Django ORM/Cache as a result backend.
 
- -----------------------------------------------
 
- The ``django-celery`` library defines result backends that
 
- uses the Django ORM and Django Cache frameworks.
 
- To use this with your project you need to follow these three steps:
 
-     1. Install the ``django-celery`` library:
 
-         .. code-block:: bash
 
-             $ pip install django-celery
 
-     2. Add ``djcelery`` to ``INSTALLED_APPS``.
 
-     3. Create the celery database tables.
 
-         If you are using south_ for schema migrations, you'll want to:
 
-         .. code-block:: bash
 
-             $ python manage.py migrate djcelery
 
-         For those who are not using south, a normal ``syncdb`` will work:
 
-         .. code-block:: bash
 
-             $ python manage.py syncdb
 
- .. _south: http://pypi.python.org/pypi/South/
 
- .. admonition:: Relative Imports
 
-     You have to be consistent in how you import the task module, e.g. if
 
-     you have ``project.app`` in ``INSTALLED_APPS`` then you also
 
-     need to import the tasks ``from project.app`` or else the names
 
-     of the tasks will be different.
 
-     See :ref:`task-naming-relative-imports`
 
- Starting the worker process
 
- ===========================
 
- In a production environment you will want to run the worker in the background
 
- as a daemon - see :ref:`daemonizing` - but for testing and
 
- development it is useful to be able to start a worker instance by using the
 
- ``celery worker`` manage command, much as you would use Django's runserver:
 
- .. code-block:: bash
 
-     $ DJANGO_SETTINGS_MODULE='proj.settings' celery -A proj worker -l info
 
- For a complete listing of the command-line options available,
 
- use the help command:
 
- .. code-block:: bash
 
-     $ celery help
 
- Where to go from here
 
- =====================
 
- If you want to learn more you should continue to the
 
- :ref:`Next Steps <next-steps>` tutorial, and after that you
 
- can study the :ref:`User Guide <guide>`.
 
 
  |