Ubuntu : how to catch out of memory exceptions? 上的 python

标签 python memory ubuntu

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

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 ) 得分 910 或牺牲 child

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

最佳答案

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

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

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

关于Ubuntu : how to catch out of memory exceptions? 上的 python ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14220347/

相关文章:

python - sqlalchemy - query.all() - 要听写的元组列表

使用spyder进行Python分析: times for constituents do not sum up to a total function's time

android - 图像处理 : "dalvikvm: external allocation too large for this process" error

PHP fatal error : Maximum execution time of -1 seconds exceeded in

MYSQL 根访问被拒绝(密码重置不起作用)

python - 如何捕获Python中的嵌套函数调用已捕获的异常

python - Python 中的溢出错误 : (34, 'Result too large' )

objective-c - 是什么导致我的 iPad 应用程序出现此 EXC_CRASH?

python - 来自 Cython 中动态数组的 2D MemoryView

php - 令人困惑的 MySQL-PHP 插入在一台机器上运行 100%,但在另一台机器上运行 50%