我正在编写一个程序,通过pickle模块缓存一些结果。此时发生的情况是,如果我在执行dump操作时按下ctrl-c,dump会被中断,并导致文件损坏(即仅部分写入,因此无法再次执行loaded)。
有没有办法使dump或一般的代码块不间断?我当前的解决方案如下:
try:
file = open(path, 'w')
dump(obj, file)
file.close()
except KeyboardInterrupt:
file.close()
file.open(path,'w')
dump(obj, file)
file.close()
raise
如果操作被中断,重新启动它似乎很愚蠢,所以我正在寻找一种延迟中断的方法。我该怎么做?
下面是一个上下文管理器,它为SIGINT附加了一个信号处理程序。如果调用了上下文管理器的信号处理程序,则只有在上下文管理器退出时,才通过将信号传递给原始处理程序来延迟信号。
import signal
import logging
class DelayedKeyboardInterrupt(object):
def __enter__(self):
self.signal_received = False
self.old_handler = signal.signal(signal.SIGINT, self.handler)
def handler(self, sig, frame):
self.signal_received = (sig,