RAMプログラムの使用量をPythonプログラムから半分に制限するため、すべてのRAMが使用されています。このため、次のコードを使用していますが、機能せず、ラップトップがまだフリーズしています。
import sys
import resource
def memory_limit():
rsrc = resource.RLIMIT_DATA
soft, hard = resource.getrlimit(rsrc)
soft /= 2
resource.setrlimit(rsrc, (soft, hard))
if __name__ == '__main__':
memory_limit() # Limitates maximun memory usage to half
try:
main()
except MemoryError:
sys.stderr.write('MAXIMUM MEMORY EXCEEDED')
sys.exit(-1)
main
関数から呼び出す他の関数を使用しています。
何が悪いのですか?
前もって感謝します。
PD:私はすでにこれについて検索して、入れたコードを見つけましたが、それでもまだ機能していません...
さて、私はいくつかの調査を行い、Linuxシステムからメモリを取得する関数をここに見つけました: Determine free RAM と私はそれを取得するために少し変更しました利用可能な空きメモリだけを使用して、利用可能な最大メモリを半分として設定します。
コード:
_def memory_limit():
soft, hard = resource.getrlimit(resource.RLIMIT_AS)
resource.setrlimit(resource.RLIMIT_AS, (get_memory() * 1024 / 2, hard))
def get_memory():
with open('/proc/meminfo', 'r') as mem:
free_memory = 0
for i in mem:
sline = i.split()
if str(sline[0]) in ('MemFree:', 'Buffers:', 'Cached:'):
free_memory += int(sline[1])
return free_memory
if __name__ == '__main__':
memory_limit() # Limitates maximun memory usage to half
try:
main()
except MemoryError:
sys.stderr.write('\n\nERROR: Memory Exception\n')
sys.exit(1)
_
半分に設定する行はresource.setrlimit(resource.RLIMIT_AS, (get_memory() * 1024 / 2, hard))
で、get_memory() * 1024 / 2
は半分に設定します(バイト単位)。
これが将来同じ問題で他の人を助けることができることを願っています! =)
それを使用する方が良いです:
if str(sline[0]) == 'MemAvailable:':
free_memory = int(sline[1])
break
1TBのRAMが搭載されたマシンで8GBの使用可能なメモリが返された回答コード