Pythonスクリプトでは、特定の関数呼び出しのメモリ制限を設定したいとします。私はhow to limit heap sizeを見た。しかし、私は実行中のPythonプロセス全体のメモリを制限したくない、つまり関数呼び出しの前後にメモリ制限を設定したくない。Python:特定の関数呼び出しのメモリ制限を設定する
メモリ制限が呼び出し元に影響しないように、一定量のメモリを使用して関数呼び出しを行う方法はありますか?
Pythonスクリプトでは、特定の関数呼び出しのメモリ制限を設定したいとします。私はhow to limit heap sizeを見た。しかし、私は実行中のPythonプロセス全体のメモリを制限したくない、つまり関数呼び出しの前後にメモリ制限を設定したくない。Python:特定の関数呼び出しのメモリ制限を設定する
メモリ制限が呼び出し元に影響しないように、一定量のメモリを使用して関数呼び出しを行う方法はありますか?
いいえ、これは不可能です。 Pythonは、どの関数が新しいメモリの割り当てを担当するのか、またlibcも追跡しないので、ただ1つの関数だけでメモリの使用を制限する方法はありません。
これを行うには、新しい関数を使用してPython関数が担当するメモリを割り当てる必要があるように、Pythonを修正する必要があります。その限界。
これを行う唯一の方法は、実際には限られたメモリを持つ別のプロセスでこの関数を実行することです。@JBernardoによると。
サンドボックスの実装に関しては、既に比較的よくテストされた実装が存在します。あなたがそれらを使用できない理由はありますか?特に、PyPyのsandboxed VMとZope sandboxを参照してください。
新しいプロセスを開き、ヒープサイズを制限します。 – JBernardo
また、理論上は現在のフレームを検査し、その中のすべてのオブジェクトを含むツリーを再帰的に構築し、使用されるメモリを見積もることもできますが、単純ではありません。 gppy.heapyのようなメモリプロファイラがどうやってそれをするのかを調べてください。 –
しかし、本当の問題は、なぜそれをしたいのですか?このための組み込み機能はないので、間違った方法で問題に近づいている可能性があります。 –