以字符串形式返回Celery异常,而不是在客户端中引发它们

时间:2019-02-19 18:38:59

标签: python celery

我用Celery替换了Rabbitmq worker的现有实现,并且我试图模仿以前的行为,以避免必须重构我们的代码库。

当前,如果工作人员提出错误,客户端将重新提出该错误。相反,我想要的行为是,如果工作程序引发错误,我想捕获它并以字符串形式返回其回溯。我希望错误处理是在Worker端完成的,而不是在Client端完成的。

例如

芹菜的默认行为:

@task
def foo():
    raise Exception("Custom exception")

res = app.send_task("foo").get()  # This raises an Exception.

如果我想错误处理该异常,我将被迫编写如下内容:

@task
def foo():
    raise Exception("Custom exception")


try:
    res = app.send_task("foo").get()
catch Exception as ex:
    res = str(ex)

我有可能实现这一目标吗?还是Celery一直希望开发人员通过将每个调用包装在try-catch块中来在客户端进行所有错误处理?

我在想,也许我可以添加一个on_failure()覆盖,它将Exception转换为字符串并将其作为响应(?)发送。

0 个答案:

没有答案