无法在Celery中“重试”工作

时间:2013-05-29 22:44:41

标签: python celery celeryd

给定文件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])

配置了celeryconfig.py

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

我在具有两个文件的目录中调用:

$ celeryd -E

然后

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

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

所以try.txt是用

创建的
A trial = 7!

只有一次。 这意味着,重试被忽略了。

我尝试了很多其他的事情:

  • 使用MongoDB作为代理和后端并检查数据库(奇怪的是,即使在“倒计时” - 计划的工作中,我也无法在我的经纪人“消息”集合中看到任何内容)
  • here中的PING示例,包括RabbitMQ和MongoDB
  • 使用print(如PING示例)和logging
  • 在屏幕上打印
  • 在引发强制Exception之后,在except块中进行重试调用,引发或返回重试(),将“throw”参数更改为True / False /不指定。
  • 查看celery flower发生了什么(“经纪人”链接中没有显示任何内容)

但没有碰巧工作= /

我的celery report输出:

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

上面有什么不对吗?我需要做些什么来使retry()方法有效?

0 个答案:

没有答案