Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 26, 2013 11:24:58

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Процесс, нагрузка на ЦП

Может есть решение более правильное, но пока такое…
в данном коде определенный процесс , если начинает нагружать процессор, в течении некоторого времени, его убиваем, вопрос : если процесс завершился, то почему начинает жрать ресурсы сам скрипт?

'''
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

Офлайн

#2 Окт. 26, 2013 11:49:39

masterito
От:
Зарегистрирован: 2011-06-13
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Процесс, нагрузка на ЦП

Скрипт входит в бесконечный цикл “while True”.
Вам нужно либо выйти из цикла по завершении for (и заверщить программу), либо добавить sleep после каждой итерации.



Офлайн

#3 Окт. 26, 2013 12:04:52

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Процесс, нагрузка на ЦП

Нужен постоянный мониторинг

Офлайн

#4 Окт. 26, 2013 13:30:27

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Процесс, нагрузка на ЦП

masterito прав. Так не бывает. Все утилиты мониторинга оперируют каким-то периодом. 1мс, 10мс, 100мс, 1час, … но это должен быть конкретный промежуток. Посмотрите как работают утилиты вроде ‘top’ или диспетчера задач Windows, они обновляют свои значения раз в секунду или около того.



Отредактировано Soteric (Окт. 26, 2013 13:31:25)

Офлайн

#5 Окт. 26, 2013 13:37:23

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Процесс, нагрузка на ЦП

это я понимаю, и когда делаю таймслип , код не работает как положено
в общем, если есть указанный процесс , то все нормально до того момента пока процесс не станет кушать ресурсы, если процесса нет , то ставлю таймслип, и вообще все замирает, даже если процесс вновь появился

Офлайн

#6 Окт. 26, 2013 13:40:18

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Процесс, нагрузка на ЦП

Запость код с таймслипом



Офлайн

#7 Окт. 26, 2013 13:43:24

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Процесс, нагрузка на ЦП

            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)

Офлайн

#8 Окт. 26, 2013 13:44:59

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Процесс, нагрузка на ЦП

может стоит просто мониторить сам проц

psutil.cpu_percent(interval=1, percpu=True)
и в случае нагрузки искать процесс нагружающий, хотя тоже все сведется к тому же

Офлайн

#9 Окт. 26, 2013 13:47:08

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Процесс, нагрузка на ЦП

Насколько я понял, 5 секунд здесь - это задержка между проверкой двух процессов. sleep нужно вынести за пределы for.



Офлайн

#10 Окт. 26, 2013 13:49:58

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

Процесс, нагрузка на ЦП

Soteric
Насколько я понял, 5 секунд здесь - это задержка между проверкой двух процессов. sleep нужно вынести за пределы for.
и за пределы выносил…хотя еще раз попробую
ну да , тогда меня не устроил таймслип, потому что в это время возможна нагрузка на проц, ну хотя это не критично
ок, теперь понимаю , что мне то нужно завершить процесс при длительной нагрузке, так что пойдет…спасибо

Отредактировано sanodin (Окт. 26, 2013 13:57:29)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version