当发生异常时,我想在没有部分处理数据的情况下干净地退出。这是我正在尝试的那种代码:
exit_lock = threading.lock()
def sig_interrupt_handler(signal, frame):
with exit_lock:
sys.exit(0)
signal.signal(signal.SIGINT, sig_interrupt_handler)
while data_left() > 0:
with exit_lock:
data = fetch_data(10)
for datum in data:
processor = Processor(datum)
processor.process()
datum.delete()
但是,当按下 ctrl+c 时,此代码会导致我的程序锁定。我试过让中断处理程序启动一个新线程,但这会导致 ctrl+c 什么都不做。
确保干净出口的正确方法是什么?