我用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转换为字符串并将其作为响应(?)发送。