我有一个python脚本,运行时间很长。 有时我需要中止它,然后再运行它。它将当前结果转储到pickle文件中,但在错误的时间中止(CTLR+C)时,该文件会损坏。在
有没有一种方法可以让脚本完成该任务并在之后中止它? 我不知道去哪儿找。在
谢谢你
编辑:我的程序看起来有点像:
import pickle
for key in keylist:
do_smth(mydict)
with open('myfile.p','w+b') as f:
pickle.dump(mydict,f)
编辑2:谢谢你们,试试看:。。。除了:。。。很有魅力。 因为我是脚本的唯一用户,所以我不需要“保存”版本。不过,我肯定会调查它(现在我不熟悉线程)。在
我还更改了我的循环,我将只pickle我的文件,以防出现异常或在循环完成后。在
^{2}$
Ctrl+C实际上抛出了一种称为可以通过
KeyboardInterrupt
的特殊类型的异常。因此,如果中止脚本以便稍后运行它的方法是发送该异常,则可以在退出之前保存数据。{{关于注释:请确保将此异常发送一次。
这是因为如果您发送它,代码将转到保存部分,这没有异常捕获块。因此,如果您多次发送,您的数据可能保存不正确。在
您还可以为
KeyboardInterrupt
创建处理程序:您要保护两个操作:
仅使用
try
,except
块,这两个都可以被中断,并使数据或输出文件处于损坏状态。在This answer有一个有趣的评论:
因此,您可能需要做的是在代码中捕获
KeyboardInterrupt
,在这个except
分支中,启动一个线程来写出当前数据。我举了个例子:注意:别忘了,对数据的操作也会被
KeyboardInterrupt
破坏,因此您可能需要确保(用另一个线程?)保护更新数据的过程在相关问题 更多 >
编程相关推荐