我有一个命令行程序,当我通过终端发送ctrl-C时,它想要腌制东西。我有一些问题和疑虑:
如何执行此处理?我检查一下KeyboardInterrupt吗?有没有办法实现退出功能?
如果程序在写入我正在写入的结构的过程中停止怎么办?我认为这些写入不是原子地处理的,那么我怎样才能避免将垃圾写入pickle文件?
答案 0 :(得分:3)
您可以使用atexit
来定义退出处理程序。 Python对象的修改将以原子方式处理,因此只要您的代码以对象在(字节代码)指令之间始终处于一致状态的方式排列,您就应该没问题。
答案 1 :(得分:1)
(1)使用atexit模块:
def pickle_things():
pass
import atexit
atexit.register(pickle_things)
(2)一般情况下,你不能。想象一下,当您的程序处于写入状态时,有人会使用电源线。在所有情况下都不可能保证所有内容都得到妥善编写。
但是,在KeyboardInterrupt
的情况下,解释器会确保在提出异常之前完成目前正在做的任何事情,所以你应该没事。