我在worker_process_init信号中有一些逻辑:
@worker_process_init.connect
def init_per_worker_publisher(**kwargs):
# some init logic...
如果出现未处理的异常,setup函数失败,没有init发生,但worker应用程序继续运行,就像什么都没发生一样。
我这样解决了这个问题:
@worker_process_init.connect
def init_per_worker_publisher(**kwargs):
try:
# some init logic...
except Exception:
celery_app.control.shutdown()
也许有更好的解决方案?
可以引发WorkerShutdown
异常。
from celery.exceptions import WorkerShutdown
@worker_process_init.connect
def init_per_worker_publisher(**kwargs):
try:
# some init logic...
except Exception:
raise WorkerShutdown()