Я пытаюсь измерить время выполнения программы Python. Для этого я использую библиотеку perf_counter()
.
Моя проблема не в библиотеке, а в том, как измерить конкретный случай.
Дело в том, что моя программа содержит время, и мне особенно интересно знать, сколько времени на выполнение потребляет условие (для тех, кому интересно: это потому, что условие while состоит в том, что очень длинная логическая формула выполнима, поэтому этот поиск может быть дорогим).
Мой вопрос в том, как я могу рассчитать это?
Я имею в виду, что я мог бы (как вы можете видеть ниже) повторно выполнить условие и сохранить его, но это не решение для меня, потому что (1) время могло отличаться от времени выполнения условия while и выше все, (2) было бы предпочтительнее не выполнять код повторно, так как это искажает реальное время полного выполнения.
t_start = perf_counter()
...
t_condition = 0
while condition:
t_conditionStart = perf_counter()
condition #measure this one? I do not like this!
t_conditionStop = perf_counter()
t_condition += t_conditionStop - t_conditionStart
...
...
t_stop = perf_counter()
total_time = t_stop - t_start
condition_percentage = t_condition / total_time
Я не знаю, упускаю ли я что-то очень простое.
Для тех, кто интересуется реальной проблемой SAT (с использованием Z3-Py), код должен выглядеть (или, лучше сказать, не должен) следующим образом:
t_start = perf_counter()
...
t_satSearch = 0
s = Solver()
while s.check() == sat:
t_satSearchStart = perf_counter()
s.check() == sat #measure this one? I do not like this!
t_satSearchStop = perf_counter()
t_satSearch += t_satSearchStop - t_satSearchStart
...
...
t_stop = perf_counter()
total_time = t_stop - t_start
satSearch_percentage = t_satSearch / total_time
Условие проверяется перед каждым выполнением цикла. Итак, все, что вам нужно сделать, это измерить время в 4-х местах:
Таким образом, вы можете получить время выполнения в каждом возможном случае, проверяя значение t1-t0 каждый раз, когда вы обновляете t1.