Как проверить потребление процессора скриптом Python - PullRequest
0 голосов
/ 01 июня 2018

Я реализовал фильтр Калмана.Я хочу узнать, сколько энергии процессора потребляется моим сценарием.Я проверил другие сообщения в Stackoverflow и, следуя им, я скачал библиотеку psutil.Теперь я не знаю, где поставить утверждения, чтобы получить правильный ответ.Вот мой код:

if __name__ == "__main__":
   #kalman code
    pid = os.getpid()
    py = psutil.Process(pid)
    current_process = psutil.Process();
    memoryUse = py.memory_info()[0]/2.**30  # memory use in GB...I think
    print('memory use:', memoryUse)
    print(current_process.cpu_percent())
    print(psutil.virtual_memory()) #  physical memory usage

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

('memory use:', 0.1001129150390625)
0.0
svmem(total=6123679744, available=4229349376, percent=30.9, used=1334358016, free=3152703488, active=1790803968, inactive=956125184, buffers=82894848, cached=1553723392, shared=289931264, slab=132927488)

Редактировать: Цель: выяснить, сколько энергии потребляет процессор при выполнении этого скрипта

1 Ответ

0 голосов
/ 01 июня 2018

Я не уверен, пытаетесь ли вы найти пиковое использование ЦП во время выполнения этого #kalman code, или среднее, или общее, или что-то еще?

Но вы не можете получить ни одного из них, позвонив cpu_percent() после того, как это будет сделано.Вы просто измеряете загрузку процессора, набирая cpu_percent().


Некоторые из них вы можете получить, позвонив по номеру cpu_times().Это скажет вам, сколько секунд было потрачено на выполнение различных действий, включая общее «время ЦП пользователя» и «время ЦП системы».Документы точно указывают, какие значения вы получаете на каждой платформе и что они означают.

На самом деле, если это все, что вы хотите (включая только эти два значения), вам даже не нужно psutils, вы можете просто использовать os.times() в стандартной библиотеке.

Или вы можете просто использовать команду time вне вашей программы, запустив time python myscript.py вместо python myscript.py.


Для других вам нужно позвонить cpu_percent , пока ваш код работает .Одно простое решение - запустить фоновый процесс с multiprocessing или concurrent.futures, который просто вызывает cpu_percent в вашем основном процессе.Чтобы получить что-нибудь полезное, дочернему процессу может потребоваться периодически вызывать его, агрегируя результаты (например, чтобы найти максимум), пока ему не будет приказано остановиться, и в этот момент он может вернуть агрегат.

Так какэто не совсем тривиально для написания, и определенно нелегко объяснить, не зная, насколько хорошо вы знакомы с многопроцессорной обработкой, и есть хороший шанс, что на самом деле вы хотите здесь cpu_times(), я не буду вдаваться в подробности, если об этом не спросят.

...