给定一个文件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 作为代理和后端并检查数据库(奇怪的是,即使在“倒计时”计划的工作中,我也看不到代理“消息”集合中的任何内容)
- 此处的 PING 示例,包括 RabbitMQ 和 MongoDB
- 同时在屏幕上打印
print
(如 PING 示例)和logging
- 在引发强制后,在异常块中进行重试调用
Exception
,引发或返回 retry(),将“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() 方法起作用?