Как измерить время подпроцесса, содержащего задержку в Python? - PullRequest
1 голос
/ 19 апреля 2020

У меня есть процесс с задержкой в ​​2 секунды, и я пытаюсь измерить время, затраченное на задержку процесса для запуска в другой программе. Я пробовал много разных временных инструментов, включая time.time (), time.clock (), timeit, resource, os.wait4 () и т. Д. c. В любом случае, ни одно из измерений не учитывает 2-секундную задержку в дочернем процессе (все они возвращают очень маленькое число, например, 0,00113 ...). Напротив, когда я запускаю один и тот же код с задержкой в ​​текущей программе (вместо измерения подпроцесса), он выводит правильное истекшее время (что-то вроде 2,002 ...). Я точно знаю, что задержка работает правильно в дочернем процессе, просто она не измеряется правильно. Мой код выглядит следующим образом (это только одна из реализаций, которые я пробовал, используя time.time ()):

import subprocess

now = time.clock()
response = subprocess.Popen(['python3', 'oracle.py'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
response.wait()
then = time.clock()
time_elapsed = then - now
print("time elapsed: ", str(time_elapsed))```

1 Ответ

0 голосов
/ 19 апреля 2020

Проблема не в том, что time.clock() не работает, проблема в том, что ваш подпроцесс либо фактически не занимает 2 секунды, либо не запускается вообще.

Попробуйте использовать subprocess.check_output() вместо subprocess.Popen() и дайте нам знать, что это показывает. Таким образом, вам не понадобится response.wait(), потому что ожидание и проверка ошибок обрабатываются внутри check_output().

...