【问题标题】:celery tasks: update state after try & except blockcelery 任务:在 try & except 块后更新状态
【发布时间】:2018-08-21 23:53:35
【问题描述】:

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

【问题讨论】:

  • 你说它不起作用是什么意思?
  • 好吧,当我查看我的花卉仪表板时,我的任务以成功状态完成:/

标签: django rabbitmq task celery flower


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 2014-06-13
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2019-03-18
    相关资源
    最近更新 更多