0

我有 celery 4.1.0、django 1.11.11、rabbitMQ 和 Redis 作为结果。

@shared_task(bind=True)
    def one_task(self):
        try:
            ...
            some db stuff here
            ...
        except BaseException as error:
            self.update_state(state='FAILURE', 
                              meta={'notes': 'some notes'})
            logger.error('Error Message ', exc_info=True, 
                         extra={'error': error})

所以,当我的代码遇到除了块 self.update_state 不起作用但记录器工作时......实际上,我不确定是否

@shared_task(bin=True)

这是正确的...

我想做的是捕获我的python代码的异常(通过try和except块),更改状态并手动终止任务。那么,有什么建议/帮助吗?

4

1 回答 1

1

Celery 将为每个完成的任务设置成功状态,而不会引发异常。而且您正在捕获该异常而不将其扔回。

不幸的是,扔掉它并没有帮助,因为 celery 会将任务置于失败状态,并带有自己的错误消息。

该问题的唯一解决方案是ignore_result=True为此任务设置选项,因此 celery 不会管理此任务的状态,但 celery 文档表明它可能有其他副作用。

于 2018-03-14T07:41:33.117 回答