我正在开发一个库类型的签出/签入系统。当用户单击exit
时,程序调用一个close_window
函数,该函数在窗口被破坏之前将当前字典对象转储到pickle文件中。在
def close_window(self):
if messagebox.askokcancel("Quit", "You want to close the program now?"):
patrons.dump_data()
self.master.destroy()
当程序再次启动时,它调用一个load_data
函数来加载pickled文件。不知怎么的,我在退出系统时遇到了MemoryError
,其中一个pickled文件被一个空文件覆盖。根据the documentation,我发现当程序创建太多对象并耗尽内存时,MemoryError
就会发生。我不知道为什么会发生这种情况,因为我不是在处理大数据。被覆盖的pickle文件只有1kb。在
当MemoryError
发生时,如何确保我的pickled文件不会被空文件覆盖?这可能导致严重的数据丢失。我是新编程和使用这个项目学习。可能是我做了一些严重的错误导致内存错误,或者我只是需要更多的计算机内存。在任何情况下,用空文件覆盖保存的文件是没有意义的,无论内存是否出错。在
此错误在MemoryError while pickling data in python中有部分讨论。不过,这里有一个空文件,甚至没有一个部分文件。我想知道是否有解决这个问题的方法。可能是将pickled数据保存到一个临时文件中。如果在保存期间没有发生内存错误,那么可以使用临时文件覆盖永久文件(但这可能还会触发另一个MemoryError
对吗?)。在
我运行win7x86,3gbram,python3.4.1
根据Gerrat的上述评论,我想知道以下是一个很好的解决方法:
实际上,我首先将dictionary对象保存到一个临时文件(}仍然存在。在
temp_patrons.pkl
),该文件被重命名为我的永久文件(patrons.pkl
),假设没有MemoryError
。如果MemoryError
,则原始的{相关问题 更多 >
编程相关推荐