Как измерить время состояния While (в Python). Нужен для измерения поиска SAT в Z3-Py

Я пытаюсь измерить время выполнения программы 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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Условие проверяется перед каждым выполнением цикла. Итак, все, что вам нужно сделать, это измерить время в 4-х местах:

  1. перед циклом (t0)
  2. в начале цикла (t1)
  3. непосредственно перед завершением цикла (t0)
  4. после цикла while (t1)

Таким образом, вы можете получить время выполнения в каждом возможном случае, проверяя значение t1-t0 каждый раз, когда вы обновляете t1.

Другие вопросы по теме