我正在将PythonDjango与Celery和Redis一起使用,我想捕获两个错误:
- 第一个错误
OperationalError
表示服务器已关闭 - 如果app.control.inspect((.active((为None,则表示工作人员已停机
功能:
- 如果没有
OperationalError
,则应同时检查app.control.inspect().active()
- 如果有
OperationalError
,则不应检查app.control.inspect().active()
,因为芹菜会挂起/冻结 - 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:
......