小编Gre*_*ver的帖子

使用 autoretry_for 正确处理 Celery 异常

我有一个装饰有的芹菜任务,autoretry_for以便在发生已知异常时,它将重试该任务。这里有一个虚拟版本:

class ExpectedException(Exception):
    pass


@app.task(autoretry_for=(ExpectedException,), retry_kwargs={'max_retries': 2, 'countdown': 1})
def decorated_autoretry():
    logging.info(
        "Attempt: {attempt} of {attempts}".format(
            attempt=decorated_autoretry.request.retries, attempts=decorated_autoretry.max_retries
        )
    )
    raise ExpectedException
Run Code Online (Sandbox Code Playgroud)

当运行给出以下输出时:

[2018-01-30 12:17:31,899: INFO/MainProcess] Received task: interpretationAPI.tasks.util_tasks.decorated_autoretry[9e00f56d-fb90-46db-a735-678fd0b4cb5a]  
[2018-01-30 12:17:31,900: INFO/ForkPoolWorker-1] Attempt: 1 of 3
[2018-01-30 12:17:31,915: INFO/ForkPoolWorker-1] Task interpretationAPI.tasks.util_tasks.decorated_autoretry[9e00f56d-fb90-46db-a735-678fd0b4cb5a] retry: Retry in 1s: ExpectedException()
[2018-01-30 12:17:31,915: INFO/MainProcess] Received task: interpretationAPI.tasks.util_tasks.decorated_autoretry[9e00f56d-fb90-46db-a735-678fd0b4cb5a]  ETA:[2018-01-30 12:17:32.901955+00:00] 
[2018-01-30 12:17:33,024: INFO/ForkPoolWorker-2] Attempt: 2 of 3
[2018-01-30 12:17:33,072: INFO/MainProcess] Received task: interpretationAPI.tasks.util_tasks.decorated_autoretry[9e00f56d-fb90-46db-a735-678fd0b4cb5a]  ETA:[2018-01-30 12:17:34.029462+00:00] 
[2018-01-30 12:17:33,072: INFO/ForkPoolWorker-2] Task interpretationAPI.tasks.util_tasks.decorated_autoretry[9e00f56d-fb90-46db-a735-678fd0b4cb5a] retry: Retry in 1s: …
Run Code Online (Sandbox Code Playgroud)

python message-queue rabbitmq celery

2
推荐指数
1
解决办法
2271
查看次数

标签 统计

celery ×1

message-queue ×1

python ×1

rabbitmq ×1