2

我在 Ubuntu AWS EC2 实例上运行的 python 脚本中有以下块:

try:
    data = json.loads(line)
    # further processing of data
except Exception, e:  
    # something went bad

line是从文本文件中提取的字符串。在大多数情况下,它会得到很好的处理。时不时地,我会得到一些非常棒的台词。在这种情况下,脚本终止(“-9”)并dmesg -T显示如下消息[Tue Jan 8 16:10:48 2013] Out of memory: Kill process 13609 (python) score 910 or sacrifice child

我不明白的是为什么它没有在try-except块中捕获异常而不是崩溃。是否可以在此块中进行更改,以使脚本不会崩溃但引发异常?谢谢

4

1 回答 1

1

您的 Python 进程正在被内核 OOM(内存不足)杀手 ( docs ) 杀死。这正在杀死 Python SIGKILL,因此 Python 没有任何机会响应此事件......因此它无法为您的代码生成任何异常。

您可能需要在具有更多资源的环境中运行您的进程(这样您就不会占用如此大比例的系统内存),或者您可能需要限制您可以读取的 JSON 数据的大小。

我在下面发布的链接之一提到了 ijson,它是一个迭代 JSON 解析器。这可能比标准的 JSON 解析器更节省内存,但我还没有尝试过。

于 2013-01-08T17:17:08.683 回答