芹菜任务:尝试后更新状态&除了块

时间:2018-03-13 16:18:10

标签: django rabbitmq task celery flower

我有芹菜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 blocks),更改状态并手动终止任务。 那么,有什么建议/帮助吗?

1 个答案:

答案 0 :(得分:0)

Celery将在完成的每项任务中设置成功状态,而不会抛出异常。而且你正在抓住那个例外,而不会把它抛回去。

不幸的是,投掷它将无济于事,因为芹菜会将任务置于失败状态并带有自己的错误消息。

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