2

Given a file myapp.py

from celery import Celery
celery = Celery("myapp")
celery.config_from_object("celeryconfig")

@celery.task(default_retry_delay=5 * 60, max_retries=12)
def add(a, b):
      with open("try.txt", "a") as f:
            f.write("A trial = {}!\n".format(a + b))
      raise add.retry([a, b])

Configured with a celeryconfig.py

CELERY_IMPORTS = ["myapp"]
BROKER_URL = "amqp://"
CELERY_RESULT_BACKEND = "amqp"

I call in the directory that have both files:

$ celeryd -E

And then

$ python -c "import myapp; myapp.add.delay(2, 5)"

or

$ celery call myapp.add --args="[2, 5]"

So the try.txt is created with

A trial = 7!

only once. That means, the retry was ignored.

I tried many other things:

  • Using MongoDB as broker and backend and inspecting the database (strangely enough, I can't see anything in my broker "messages" collection even in a "countdown"-scheduled job)
  • The PING example in here, both with RabbitMQ and MongoDB
  • Printing on the screen with both print (like the PING example) and logging
  • Make the retry call in an except block after an enforced Exception is raised, raising or returning the retry(), changing the "throw" parameter to True/False/not specified.
  • Seeing what's happening with celery flower (in which the "broker" link shows nothing)

But none happened to work =/

My celery report output:

software -> celery:3.0.19 (Chiastic Slide) kombu:2.5.10 py:2.7.3
            billiard:2.7.3.28 py-amqp:N/A
platform -> system:Linux arch:64bit, ELF imp:CPython
loader   -> celery.loaders.default.Loader
settings -> transport:amqp results:amqp

Is there anything wrong above? What I need to do to make the retry() method work?

tshepang
  • 12,111
  • 21
  • 91
  • 136
H.D.
  • 4,168
  • 1
  • 18
  • 15

0 Answers0