Unix в режиме реального времени против Python process_time () - PullRequest
0 голосов
/ 11 декабря 2018

Я запускаю внешний скрипт, используя subprocess.run(...) с внешним исполняемым файлом, о котором я очень мало знаю.

Я окружил вызов run() парой временных вызовов:

import subprocess
import time

t1_start = time.perf_counter()
t2_start = time.process_time()
cmdout = subprocess.run(['executable', '-arg', 'val'], capture_output=True)
t1_end = time.perf_counter()
t2_end = time.process_time()
print('real time: %f' %(t1_end-t1_start))
print('user time: %f' %(t2_end-t2_start))

executable - это сторонний коммерчески чувствительный двоичный код, которым я не могу поделиться.

Когда я запускаю это, я получаю что-то вроде

$ python my_script.py
real time: 7.9063631325456365
user time: 1.0106746650250822

но когда я вызываю скрипт python с time:

$ time python my_script.py
real time: 7.9063631325456365
user time: 1.0106746650250822

real    0m3.078s
user    0m1.464s
sys     0m0.359s

, я не понимаю, почему существует так много расхождений между результатом perf_counter() и real временем, которое возвращает unix.

Как я понял, time.process() - это время процесса (это общее время ЦП, т. Е. user + sys?), И time.perf_counter() должно (?) Быть приблизительно эквивалентным real - но мои результаты могут показаться, что это не так?

1 Ответ

0 голосов
/ 11 декабря 2018

Ваш скрипт не работает как есть.

    print('real time: ' + t1_end-t1_start)
TypeError: can only concatenate str (not "float") to str

Исправляя это, я не могу воспроизвести проблему на моем Mac (и, не зная вашего executable, я просто решилвыбрасывать случайные числа в корзину битов):

import time, subprocess

t1_start = time.perf_counter()
t2_start = time.process_time()
subprocess.run('dd if=/dev/urandom of=/dev/null bs=100m count=1', shell=True)
t1_end = time.perf_counter()
t2_end = time.process_time()
print('real time: ', (t1_end-t1_start))
print('user time: ', (t2_end-t2_start))

bash-4.4$ time python3 so53724371.py
1+0 records in
1+0 records out
104857600 bytes transferred in 3.286906 secs (31901612 bytes/sec)
real time:  3.3021506880000002
user time:  0.001468999999999998

real    0m3.354s
user    0m0.036s
sys     0m3.303s
bash-4.4$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...