В конце скрипта я хотел бы вернуть пиковое использование памяти. После прочтения otherquestions, вот мой сценарий:Resource.getrusage() всегда возвращает 0
#!/usr/bin/env python
import sys, os, resource, platform
print platform.platform(), platform.python_version()
os.system("grep 'VmRSS' /proc/%s/status" % os.getpid())
print resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
dat = [x for x in xrange(10000000)]
os.system("grep 'VmRSS' /proc/%s/status" % os.getpid())
print resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
и вот что я получаю:
$ test.py
Linux-2.6.18-194.26.1.el5-x86_64-with-redhat-5.5-Final 2.7.2
VmRSS: 4472 kB
0
VmRSS: 322684 kB
0
Почему resource.getrusage
всегда возвращаются меня 0?
То же самое происходит в интерактивном режиме в терминале. Может ли это быть связано с тем, как Python был специально установлен на моей машине? (Это компьютерный кластер, который я использую с другими и управляемый админами.)
Редактировать: то же самое происходит, когда я использую подпроцесс; выполнения сценария
#!/usr/bin/env python
import sys, os, resource, platform
from subprocess import Popen, PIPE
print platform.platform(), platform.python_version()
p = Popen(["grep", "VmRSS", "/proc/%s/status" % os.getpid()], shell=False, stdout=PIPE)
print p.communicate()
print "resource:", resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
dat = [x for x in xrange(10000000)]
p = Popen(["grep", "VmRSS", "/proc/%s/status" % os.getpid()], shell=False, stdout=PIPE)
print p.communicate()
print "resource:", resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
дает это:
$ test.py
Linux-2.6.18-194.26.1.el5-x86_64-with-redhat-5.5-Final 2.7.2
('VmRSS:\t 4940 kB\n', None)
resource: 0
('VmRSS:\t 323152 kB\n', None)
resource: 0
Интересно, я не могу воспроизвести его здесь. – Bach
0 код выхода из grep не так ли? Вам нужно поймать stdout того, что вы запускаете при запуске os.system – deinonychusaur
@deinonychusaur Я попытался добавить «tmp =» перед os.system, но ничего не изменил. «0» происходит от print resource.getrusage. – tflutre