通过注册信号处理程序,我可以将清理代码放入 signal_handler
signal.signal(signal.SIGINT, signal_handler)
但问题是当用户多次按下 ctrl+c 时,信号处理程序运行多次并且清理工作变得疯狂。
我的问题是,如何确保清理处理程序仅在退出之前运行一次。
这是我使用锁的试验,但发生了死锁
def cleanup_handler():
lock.acquire()
if not done:
try:
cleanup()
done = True
finally:
print "release lock"
lock.release()
问题是 finally 块永远不会运行(也就是说我看不到正在打印“释放锁”)。
备注
做了一个小实验后,似乎不是同时运行信号器处理程序。当收到新的 Ctrl+C 时,旧的处理程序被杀死并运行一个新的处理程序。我对么?如果是,问题会变得更加复杂,因为我不希望我的处理程序在....