2017-07-31 10 views
0

私はちょうどMemoryErrorがマシンで起こるのを見ました。そして、私はこの後、サーバ上の利用可能なキャッシュが大幅に増加したことに気付きました。エラーがスローされたときにPythonがメモリ管理タスクをトリガーする方法はありますか?または、これは潜在的にサーバー(Linux/CentOS)によって管理されていますか?MemoryErrorはpythonにキャッシュをフラッシュさせますか?

答えて

1

MemoryErrorが、これはそれのために発生させなければならないように、特別に処理されず、他の例外ではなく、されています

  1. 例外スタックをアンワインド行い、及びオブジェクトはもっぱら間のスタックに沿って参照例外処理が完了すると例外が発生し、捕捉されるタイミングは一般的に解放されます(処理中に例外トレースバックが発生してクリーンアップが発生しないように循環参照を作成する傾向があります)。
  2. MemoryErrorはではなくBaseExceptionです。 「ジェネリック」によって処理される可能性が高いexcept Exception:ブロック。つまり、より多くのスタックレイヤが解放され、最終的に解放されます。
  3. CPython周期ガベージコレクタdetermines when to run collections based on the number of allocations and deallocations that have occurred。大きなスタックアンワインドは、多数のオブジェクトを解放した場合、さらには、収集

をトリガするために十分だ場合には、このすべては、メモリが解除される可能性が高く、それのどれもがMemoryErrorに特定されていない解放される可能性があります。 Ctrl-Cを押してKeyboardInterruptをトリガーした場合、同じ動作が観察される可能性があります。おそらく、Python exitを見ている可能性があります。あるいは、Linuxがキャッシュをダンプして極端なメモリ要求に応答しています。 MemoryErrorは、の後に、特に1回の大量の要求ではなく、メモリのブロックに対して複数の連続した要求で要求が行われた場合に、キャッシュがダンプされて大量のメモリ要求を満たすことを試みると、になります。

+0

すばらしい説明、ありがとうございました! – JacobIRR

関連する問題