10

Python スクリプトで、特定の関数呼び出しにメモリ制限を設定したいと考えています。ヒープサイズを制限する方法を見ました。ただし、実行中の Python プロセス全体のメモリを制限したくありません。つまり、関数呼び出しの前後にメモリ制限を設定します。

メモリ制限が呼び出し元に影響しないように、特定の量のメモリで関数呼び出しを行う方法はありますか?

4

1 に答える 1

2

いいえ、これは不可能です。Python は、どの関数が新しいメモリの割り当てを担当しているかを追跡しません。また、libc もそうではありません。そのため、単一の関数だけでメモリの使用を制限する方法はありません。

これを行うには、Python を変更して、どの Python 関数が責任を負うかを指定する必要があるメモリを割り当てる新しい関数を使用して、その関数が限界を超えた場合にメモリ割り当てを拒否できるようにする必要があります。

@JBernardoが言ったように、これを行う唯一の他の方法は、メモリが限られている別のプロセスで関数を実行することです。

サンドボックスの実装に関しては、比較的よくテストされた実装がすでにあります。それらを使用できない理由はありますか?特に、PyPy のサンドボックス化された VMZope サンドボックス を参照してください。

于 2012-04-25T16:26:14.947 に答える