当出现问题时,如何从代码中停止芹菜?例如,Redis 或数据库已关闭。
例如,如果初始化函数出现异常,我可以停止连接
@stop_if_error
@signals.worker_process_init.connect
def init_method(*_, **_):
#some init code
但是,如果工人工作正在进行并且异常已经到来,如何停止呢?
您可以将 Celery 配置为仅在代理(如果我理解得很好的话,Redis (关闭时重试 N 次。关于你提到的数据库 - 我假设你的意思是结果后端?如果您这样做,则取决于您的用例。如果结果后端不起作用,这并不重要。
我们不做任何检查,而是确保代理和结果后端是高度可用的(例如 Redis 集群(。
迟到总比没有好。我希望这对你有帮助
import celery.exceptions
import celery.signals
# Your code...
@celery.signals.worker_init.connect
def worker_init(*_, **__) -> None:
try:
pass # some init code
except Exception as e:
raise celery.exceptions.WorkerShutdown() from e
return None