Проверьте использование памяти подпроцесса в Python - PullRequest
8 голосов
/ 30 сентября 2010


Я разрабатываю приложение на Python для Ubuntu и запускаю внешние двоичные файлы из Python с использованием подпроцесса.Так как эти двоичные файлы генерируются во время выполнения и могут быть неконтролируемыми, мне нужно строго следить за количеством занимаемой памяти и временем выполнения этих двоичных файлов.Могу ли я как-то ограничить или контролировать использование памяти этими двоичными программами во время выполнения?Я действительно не хотел бы использовать что-то вроде «ps» в подпроцессе для этой цели.

Ответы [ 2 ]

11 голосов
/ 30 сентября 2010

Вы можете использовать модуль Python resource для установки пределов до запуска вашего подпроцесса.

Для мониторинга resource.getrusage () предоставит вам обобщенную информацию по всем вашим подпроцессам; если вы хотите увидеть информацию по каждому подпроцессу, вы можете выполнить трюк / proc в этом другом комментарии (непереносимый, но эффективный) или поместить программу Python между каждым подпроцессом и выяснить некоторую связь (переносимая, уродливая, слегка эффективная ).

4 голосов
/ 30 сентября 2010

Имея номер PID вашего подпроцесса, вы можете прочитать всю информацию из proc файловой системы . Использование:

/ proc / [PID] / smaps (начиная с Linux 2.6.14) Этот файл показывает потребление памяти для каждого из отображений процесса. Для каждого из отображений есть серия строк следующим образом:

или

/ Proc / [PID] / statm Предоставляет информацию об использовании памяти, измеренную в страницах.

В качестве альтернативы вы можете ограничить ресурсы, с которыми может работать подпроцесс:

subprocess.Popen('ulimit -v 1024; ls', shell=True)

Когда достигается заданный предел виртуальной памяти, процесс завершается неудачно с нехваткой памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...