Django-Celery catch(try except block)错误-冻结/挂起代码的问题



我正在将PythonDjango与Celery和Redis一起使用,我想捕获两个错误:

  1. 第一个错误OperationalError表示服务器已关闭
  2. 如果app.control.inspect((.active((为None,则表示工作人员已停机

功能:

  1. 如果没有OperationalError,则应同时检查app.control.inspect().active()
  2. 如果有OperationalError,则不应检查app.control.inspect().active(),因为芹菜会挂起/冻结
  3. Celery任务在这两种情况下都不起作用,但只有Redis服务器出现异常

代码:

if not error:
try:
send_email_task.delay(subject=subject, ..., html_content=html_content)
except OperationalError as e:
# do something
if not app.control.inspect().active():
# do something   
else:
......

我的问题是,如果我有OperationalError,条件if not app.control.inspect().active()将挂起代码

如果我在try中添加代码app.control.inspect().active(),它将挂起/冻结,如果是OperationalError,它将无限期地检查状态。

看起来您需要try-catch中的else

尝试:

if not error:    
try:
send_email_task.delay(subject=subject, ..., html_content=html_content)
except OperationalError as e:
# do something
else:
if not app.control.inspect().active():
# do something   
else:
......

最新更新