| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 | ============================ Frequently Asked Questions============================Questions=========MySQL is throwing deadlock errors, what can I do?-------------------------------------------------**Answer:** MySQL has default isolation level set to ``REPEATABLE-READ``,if you don't really need that, set it to ``READ-COMMITTED``.You can do that by adding the following to your ``my.cnf``::    [mysqld]    transaction-isolation = READ-COMMITTEDFor more information about InnoDBs transaction model see `MySQL - The InnoDBTransaction Model and Locking`_ in the MySQL user manual.(Thanks to Honza Kral and Anton Tsigularov for this solution).. _`MySQL - The InnoDB Transaction Model and Locking`: http://dev.mysql.com/doc/refman/5.1/en/innodb-transaction-model.htmlceleryd is not doing anything, just hanging--------------------------------------------**Answer:** See `MySQL is throwing deadlock errors, what can I do?`_.I'm having ``IntegrityError: Duplicate Key`` errors. Why?----------------------------------------------------------**Answer:** See `MySQL is throwing deadlock errors, what can I do?`_.Thanks to howsthedotcom.Why won't my Task run?----------------------**Answer:** Did you register the task in the applications ``tasks.py`` module?(or in some other module Django loads by default, like ``models.py``?).Also there might be syntax errors preventing the tasks module being imported.You can find out if the celery daemon is able to run the task by executing thetask manually:    >>> from myapp.tasks import MyPeriodicTask    >>> MyPeriodicTask.delay()Watch celery daemons logfile (or output if not running as a daemon), to seeif it's able to find the task, or if some other error is happening.Why won't my Periodic Task run?-------------------------------See `Why won't my Task run?`_.Can I send some tasks to only some servers?--------------------------------------------As of now there is only one use-case that works like this, and that istasks of type ``A`` can be sent to servers ``x`` and ``y``, while tasksof type ``B`` can be sent to server ``z``. One server can't handle more thanone routing_key, but this is coming in a later release.Say you have two servers, ``x``, and ``y`` that handles regular tasks,and one server ``z``, that only handles feed related tasks, you can use thisconfiguration:    * Servers ``x`` and ``y``: settings.py:    .. code-block:: python        AMQP_SERVER = "rabbit"        AMQP_PORT = 5678        AMQP_USER = "myapp"        AMQP_PASSWORD = "secret"        AMQP_VHOST = "myapp"        CELERY_AMQP_CONSUMER_QUEUE = "regular_tasks"        CELERY_AMQP_EXCHANGE = "tasks"        CELERY_AMQP_PUBLISHER_ROUTING_KEY = "task.regular"        CELERY_AMQP_CONSUMER_ROUTING_KEY = "task.#"        CELERY_AMQP_EXCHANGE_TYPE = "topic"    * Server ``z``: settings.py:    .. code-block:: python        AMQP_SERVER = "rabbit"        AMQP_PORT = 5678        AMQP_USER = "myapp"        AMQP_PASSWORD = "secret"        AMQP_VHOST = "myapp"                CELERY_AMQP_EXCHANGE = "tasks"        CELERY_AMQP_PUBLISHER_ROUTING_KEY = "task.regular"        CELERY_AMQP_EXCHANGE_TYPE = "topic"        # This is the settings different for this server:        CELERY_AMQP_CONSUMER_QUEUE = "feed_tasks"        CELERY_AMQP_CONSUMER_ROUTING_KEY = "feed.#"Now to make a Task run on the ``z`` server you need to set its``routing_key`` attribute so it starts with the words ``"task.feed."``:.. code-block:: python    from feedaggregator.models import Feed    from celery.task import Task    class FeedImportTask(Task):        name = "import_feed"        routing_key = "feed.importer"        def run(self, feed_url):            # something importing the feed            Feed.objects.import_feed(feed_url)You can also override this using the ``routing_key`` argument to:func:`celery.task.apply_async`:    >>> from celery.task import apply_async    >>> from myapp.tasks import RefreshFeedTask    >>> apply_async(RefreshFeedTask, args=["http://cnn.com/rss"],    ...             routing_key="feed.importer")
 |