我刚刚看到一台机器上发生了一次MemoryError,我注意到服务器上的可用缓存在这之后急剧增加。当抛出错误时,Python会以某种方式触发内存管理任务吗?或者这可能是由服务器(Linux / CentOs)管理的?
发布于 2017-08-01 06:08:08
MemoryError没有经过特殊处理,不会导致这种情况发生,也不会出现其他异常,但是:
垃圾收集器异常确实会展开堆栈,当异常处理完成时(在处理期间,异常回溯倾向于创建阻止从BaseException继承的occurring)
MemoryError的循环引用,而不是从Exception继承的循环引用,因此它不太可能由“通用”except Exception:块处理,这意味着更多的堆栈层被展开并最终释放,则可能会释放更多对象
所有这些都增加了释放内存的可能性,但这些都不是特定于MemoryError的;如果您点击Ctrl-C并触发KeyboardInterrupt,则可以观察到相同的行为。更有可能的是,您看到的是Python退出,或者Linux通过转储缓存来响应极端的内存请求;MemoryError会在转储缓存以尝试满足大内存请求之后出现,特别是当请求是以多个连续的内存块请求而不是单个巨大请求发出的时候。
https://stackoverflow.com/questions/45425892
复制相似问题