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データのサイズに制限を設ける必要がある場合があります。

以下に投稿したリンクの1つは、反復JSONパーサーであるijsonについて言及しています。これは、標準のJSONパーサーよりもメモリ効率が高い可能性がありますが、私は試していません。

于 2013-01-08T17:17:08.683 に答える