ある種のサンドボックスで信頼できないpythonコードを実行できるPythonでプログラムを書いています。したがって、信頼できないコードが割り当てることができるメモリの量を制限する方法が必要です。現在、サンドボックス環境でデフォルトの python データ構造をオーバーライドすることで、range()、list、dictionary などの最大長を制限できます。
何か案は?
ある種のサンドボックスで信頼できないpythonコードを実行できるPythonでプログラムを書いています。したがって、信頼できないコードが割り当てることができるメモリの量を制限する方法が必要です。現在、サンドボックス環境でデフォルトの python データ構造をオーバーライドすることで、range()、list、dictionary などの最大長を制限できます。
何か案は?
Unix では、resource.setrlimit(resource.RLIMIT_AS, ...)を使用して、「プロセスが使用できるアドレス空間の最大領域 (バイト単位)」を制限できます。
import sys
import resource
soft, hard = 10**7, 10**7
# soft, hard = 10**8, 10**8 # uncommenting this allows program to finish
resource.setrlimit(resource.RLIMIT_AS,(soft, hard))
memory_hog = {}
try:
for x in range(10000):
print(x)
memory_hog[str(x)]='The sky is so blue'
except MemoryError as err:
sys.exit('memory exceeded')
# memory exceeded