Я хотел бы использовать метод cpu_times()
объекта psutil.Popen
, чтобы найти кумулятивные значения после его завершения .Сначала я попробовал следующее:
p = psutil.Popen("stress --cpu 3 -v -t 15", shell=True)
p.wait()
cpuTimes = p.cpu_times()
Однако это приводит к исключению NoSuchProcess
, поскольку wait()
не возвращается до тех пор, пока процесс не будет завершен.Затем я попытался поставить вызов на cpu_times()
перед вызовом на wait()
:
p = psutil.Popen("stress --cpu 3 -v -t 15", shell=True)
cpuTimes = p.cpu_times()
p.wait()
Однако это дает ответ всех нулей.Я предполагаю, что это потому, что он вызывается сразу после запуска процесса.Итак, я добавил вызов к time.sleep()
, который просто пережил бы процесс:
p = psutil.Popen("stress --cpu 3 -v -t 15", shell=True)
time.sleep(15.) # b/c -t 15 in subprocess means it will take 15 seconds
cpuTimes = p.cpu_times()
p.wait()
Это фактически дает ожидаемое значение 45 секунд (3 процессора при 100% -ной загрузке в течение 15секунд).
Для общего процесса, однако, я не буду знать, сколько времени потребуется, чтобы закончить.Я хотел бы избежать добавления произвольно большого времени ожидания только для того, чтобы убедиться, что процесс завершен, прежде чем я сделаю запрос.
Есть ли способ узнать, что процесс выполняется без вызова wait()
или других подобныхметоды, при возврате которых процесс прекратился?