Найти - Пользователи
Полная версия: Процесс, нагрузка на ЦП
Начало » Python для новичков » Процесс, нагрузка на ЦП
1 2
sanodin
Может есть решение более правильное, но пока такое…
в данном коде определенный процесс , если начинает нагружать процессор, в течении некоторого времени, его убиваем, вопрос : если процесс завершился, то почему начинает жрать ресурсы сам скрипт?
'''
config.ini
[connect]
process = iron.exe
cpu = 75
'''
import time
import psutil
import win32com.client
import subprocess
wmi=win32com.client.GetObject('winmgmts:')
def loadConfig():
    import ConfigParser
    config = ConfigParser.ConfigParser()
    config.read('config.ini')
    process = config.get('connect', 'process')
    cpu = config.get('connect', 'cpu')
    return {'process':process,'cpu':cpu}
config = loadConfig()
print config['process']
proc_n = config['process']
numb = int(config['cpu'])
while True:
    for p in wmi.InstancesOf('win32_process'):
        try:
            res = p.Properties_('ProcessId')
            f = psutil.Process(int(res))
            if p.Name == proc_n:
                print  p.Name,res , f.get_cpu_percent()
                if f.get_cpu_percent() > numb:
                    time.sleep(2)
                    if f.get_cpu_percent() > numb:
                        subprocess.Popen('taskkill /PID %d /T /f' % int(res), shell = True)
            #print p.Name, p.Properties_('ProcessId')
        except Exception as e:
            print e.message
masterito
Скрипт входит в бесконечный цикл “while True”.
Вам нужно либо выйти из цикла по завершении for (и заверщить программу), либо добавить sleep после каждой итерации.
sanodin
Нужен постоянный мониторинг
Soteric
masterito прав. Так не бывает. Все утилиты мониторинга оперируют каким-то периодом. 1мс, 10мс, 100мс, 1час, … но это должен быть конкретный промежуток. Посмотрите как работают утилиты вроде ‘top’ или диспетчера задач Windows, они обновляют свои значения раз в секунду или около того.
sanodin
это я понимаю, и когда делаю таймслип , код не работает как положено
в общем, если есть указанный процесс , то все нормально до того момента пока процесс не станет кушать ресурсы, если процесса нет , то ставлю таймслип, и вообще все замирает, даже если процесс вновь появился
Soteric
Запость код с таймслипом
sanodin
            if p.Name == proc_n:
                print  p.Name,res , f.get_cpu_percent()
                if f.get_cpu_percent() > numb:
                    time.sleep(2)
                    if f.get_cpu_percent() > numb:
                        subprocess.Popen('taskkill /PID %d /T /f' % int(res), shell = True)
            else: time.sleep(5)
sanodin
может стоит просто мониторить сам проц
psutil.cpu_percent(interval=1, percpu=True)
и в случае нагрузки искать процесс нагружающий, хотя тоже все сведется к тому же
Soteric
Насколько я понял, 5 секунд здесь - это задержка между проверкой двух процессов. sleep нужно вынести за пределы for.
sanodin
Soteric
Насколько я понял, 5 секунд здесь - это задержка между проверкой двух процессов. sleep нужно вынести за пределы for.
и за пределы выносил…хотя еще раз попробую
ну да , тогда меня не устроил таймслип, потому что в это время возможна нагрузка на проц, ну хотя это не критично
ок, теперь понимаю , что мне то нужно завершить процесс при длительной нагрузке, так что пойдет…спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB