如何测量 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 个地方测量时间:
- 循环前 (t0)
- 在循环开始时 (t1)
- 就在循环结束之前 (t0)
- while 循环后 (t1)
这样你就可以通过每次更新 t1 时检查 t1-t0 的值来获得每种可能情况下的执行时间。
我正在尝试测量 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 个地方测量时间:
- 循环前 (t0)
- 在循环开始时 (t1)
- 就在循环结束之前 (t0)
- while 循环后 (t1)
这样你就可以通过每次更新 t1 时检查 t1-t0 的值来获得每种可能情况下的执行时间。