如何测量 While 条件的时间(Python)。需要它来测量 Z3-Py 中的 SAT 搜索

How to measure time of a While's condition (in Python). Need it to measure SAT search in Z3-Py

我正在尝试测量 Python 程序的执行时间。为此,我正在使用 perf_counter() 库。

我的问题不是关于库,而是关于如何衡量具体案例。

问题是我的程序包含一个while,我特别想知道while的条件消耗了多少执行时间(感兴趣的人:这是因为条件同时是一个很长的逻辑公式是可满足的,所以这个 sat 搜索可能很昂贵)。

我的问题是,我该如何计算?

我的意思是,我可以(如下所示)重新执行条件并保存它,但这对我来说不是解决方案,因为 (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 个地方测量时间:

  1. 循环前 (t0)
  2. 在循环开始时 (t1)
  3. 就在循环结束之前 (t0)
  4. while 循环后 (t1)

这样你就可以通过每次更新 t1 时检查 t1-t0 的值来获得每种可能情况下的执行时间。