我正在编写一个程序,通过pickle模块缓存一些结果。目前发生的情况是,如果我在执行dump
操作时按ctrl-c at,则dump
将被中断,并且生成的文件已损坏(即仅部分写入,因此不能再次对其进行load
)。
有没有办法使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
如果操作被中断,重新启动它似乎很愚蠢,所以我正在寻找一种推迟中断的方法。我该怎么做?
将函数放入线程中,并等待线程完成。
除非使用特殊的C api,否则不能中断Python线程。
看看中断是如何延迟到线程完成的?
在这里,它适合您的使用:
下面是一个上下文管理器,它为
SIGINT
附加一个信号处理程序。如果调用了上下文管理器的信号处理程序,则只有在上下文管理器退出时将信号传递给原始处理程序,信号才会延迟。使用signal模块在进程期间禁用SIGINT:
相关问题 更多 >
编程相关推荐