如何在程序退出时清理东西?

时间:2010-11-23 16:26:38

标签: python

我有一个命令行程序,当我通过终端发送ctrl-C时,它想要腌制东西。我有一些问题和疑虑:

  1. 如何执行此处理?我检查一下KeyboardInterrupt吗?有没有办法实现退出功能?

  2. 如果程序在写入我正在写入的结构的过程中停止怎么办?我认为这些写入不是原子地处理的,那么我怎样才能避免将垃圾写入pickle文件?

2 个答案:

答案 0 :(得分:3)

您可以使用atexit来定义退出处理程序。 Python对象的修改将以原子方式处理,因此只要您的代码以对象在(字节代码)指令之间始终处于一致状态的方式排列,您就应该没问题。

答案 1 :(得分:1)

(1)使用atexit模块:

def pickle_things():
    pass

import atexit
atexit.register(pickle_things)

(2)一般情况下,你不能。想象一下,当您的程序处于写入状态时,有人会使用电源线。在所有情况下都不可能保证所有内容都得到妥善编写。

但是,在KeyboardInterrupt的情况下,解释器会确保在提出异常之前完成目前正在做的任何事情,所以你应该没事。