我有一些python代码,过了一会儿会生成MemoryError
。我知道它会占用大量内存。
因此,我决定将代码放入try/except
块中,以使骨架看起来像下面这样:
while True:
while True:
try:
#---- do some stuff
except MemoryError as err:
print(err)
break
因此,我的想法是,如果出现
while
,则冲破第一个MemoryError
-loop,由于我有一个外部while
-loop,它将再次启动程序。似乎暂时可以,但是我不确定。一段时间后,它再次停止,我需要再次重新启动该程序。
有人知道更好的解决方案,以便程序可以在
MemoryError
之后再次运行吗? 最佳答案
请注意,Python仅在意识到事先会过度使用内存时才抛出MemoryError
。如果它是偶然发生的(或者被Python忽略),那么您就不走运了。 documentation已经提到了这一点:
因此,如果没有什么要挽救的东西,或者如果解释器无法恢复,则没有MemoryError
。
一个好的方法需要知道您在做什么以及如何做。在大多数情况下,生成器(例如PEP 289 on generator expressions)或map-reduce approaches可以节省大量内存。这些在这里也可能适用。