Сколько времени тратит подпроцесс python
Я хотел бы рассказать, сколько времени занимает подпроцесс.
Я попытался использовать
start = time.time()
subprocess.call('....')
elapsed = (time.time() - start)
Однако он не очень точен (не уверен, связанный с многопроцессорным или другим)
Есть ли лучший способ получить, сколько времени тратит субпроцесс?
Спасибо!
Ответы
Ответ 1
Это зависит от того, в какое время вы хотите; прошедшее время, пользовательский режим, системный режим?
С resource.getrusage
вы можете запросить пользовательский режим и время системного режима для текущих дочерних процессов. Это работает только на платформах UNIX (например, Linux, BSD и OS X):
import resource
info = resource.getrusage(resource.RUSAGE_CHILDREN)
В Windows вам, вероятно, придется использовать ctypes
для получения эквивалентной информации из API WIN32.
Ответ 2
Это более точно:
from timeit import timeit
print timeit(stmt = "subprocess.call('...')", setup = "import subprocess", number = 100)
Ответ 3
Мне потребовалось немного времени, чтобы реализовать решение Roland из-за недовольства передачи кода python в виде строк, поэтому я решил поделиться с вами рабочим примером.
Этот script раз использует внешнюю программу в рабочем каталоге и перенаправляет свой стандартный вывод и стандартную ошибку в файлы.
from timeit import timeit
reps = 500
stdout = open("add_numbers_outputs.log", 'w')
stderr = open("add_numbers_errors.log", 'w')
external_command = "./add_numbers"
parameter = str(1000000) # one million
call_arguments = """[
'%s',
'%s'], # pass additional parameters by adding elements to this list
stdout=stdout,
stderr=stderr
""" % (external_command, parameter)
print "Timing external command "+external_command+" with parameter "+parameter
time_taken = timeit(stmt = "subprocess.call(%s)" % call_arguments,
setup = """import subprocess;
stdout = open("add_numbers_outputs.log", 'w');
stderr = open("add_numbers_errors.log", 'w')
""",
number = reps) / reps
print "Average time taken for %s repetitions: %f seconds" % (reps, time_taken)