web-dev-qa-db-ja.com

Pythonの合計物理メモリを取得

分布に依存しない方法でPython内の物理メモリの合計を取得するにはどうすればよいですか?物理メモリの合計だけを使用する必要はありません。

33
Justin

クロスプラットフォームソリューションの最善策は、 psutil パッケージ( PyPI で利用可能)を使用することです。

from psutil import virtual_memory

mem = virtual_memory()
mem.total  # total physical memory available

virtual_memoryのドキュメントは こちら です。

48
Corey Goldberg

Linuxでのos.sysconfの使用:

import os
mem_bytes = os.sysconf('SC_PAGE_SIZE') * os.sysconf('SC_PHYS_PAGES')  # e.g. 4015976448
mem_gib = mem_bytes/(1024.**3)  # e.g. 3.74

注意:

  • SC_PAGE_SIZEは多くの場合4096です。
  • SC_PAGESIZESC_PAGE_SIZEは同じです。
  • 詳細については、 man sysconf を参照してください。
  • MacOSの場合、未検証のユーザーレポートごとに、これはMacOS≥10.13(High Sierra)でPython 3.6.4。以上.

Linuxでの/proc/meminfoの使用:

meminfo = dict((i.split()[0].rstrip(':'),int(i.split()[1])) for i in open('/proc/meminfo').readlines())
mem_kib = meminfo['MemTotal']  # e.g. 3921852
43
Acumenus

正規表現はこの種の場合にうまく機能し、ディストリビューション全体の小さな違いに役立つ場合があります。

import re
with open('/proc/meminfo') as f:
    meminfo = f.read()
matched = re.search(r'^MemTotal:\s+(\d+)', meminfo)
if matched: 
    mem_total_kB = int(matched.groups()[0])
12
Seth

このコードは、Python 2.7.9

import os
mem=str(os.popen('free -t -m').readlines())
"""
Get a whole line of memory output, it will be something like below
['             total       used       free     shared    buffers     cached\n', 
'Mem:           925        591        334         14         30        355\n', 
'-/+ buffers/cache:        205        719\n', 
'Swap:           99          0         99\n', 
'Total:        1025        591        434\n']
 So, we need total memory, usage and free memory.
 We should find the index of capital T which is unique at this string
"""
T_ind=mem.index('T')
"""
Than, we can recreate the string with this information. After T we have,
"Total:        " which has 14 characters, so we can start from index of T +14
and last 4 characters are also not necessary.
We can create a new sub-string using this information
"""
mem_G=mem[T_ind+14:-4]
"""
The result will be like
1025        603        422
we need to find first index of the first space, and we can start our substring
from from 0 to this index number, this will give us the string of total memory
"""
S1_ind=mem_G.index(' ')
mem_T=mem_G[0:S1_ind]

print 'Summary = ' + mem_G
print 'Total Memory = ' + mem_T +' MB'

使用済みメモリと空きメモリを簡単に取得できます

    """
        Similarly we will create a new sub-string, which will start at the second value. 
        The resulting string will be like
        603        422
        Again, we should find the index of first space and than the 
        take the Used Memory and Free memory.
        """
        mem_G1=mem_G[S1_ind+8:]
        S2_ind=mem_G1.index(' ')
        mem_U=mem_G1[0:S2_ind]

        mem_F=mem_G1[S2_ind+8:]
    print 'Used Memory = ' + mem_U +' MB'
    print 'Free Memory = ' + mem_F +' MB'
1
CodeGench