有没有办法在python中指定timeit.timeit()函数的拆机? 我知道有声明和#39;陈述'和'设置',但我还没有找到一个好的方法来进行拆解。
在我的' Statment'中包含拆解代码。正在扭曲我想要时间的代码片段的时机。我需要拆机才能释放硬件资源,以便我可以使用timeit模块中的repeat功能。
答案 0 :(得分:1)
不,没有真正好的方法来做到这一点。查看source,您可能需要将Timer类替换为其self.inner
替换为新版本。
e.g:
import inspect
import timeit
class MyTimer(timeit.Timer):
def __init__(self, stmt="pass", setup="pass", teardown=None, timer=timeit.default_timer):
timeit.Timer.__init__(self, stmt, setup, timer)
# Pull the actual function to time off the original `self.inner` function.
time_func = inspect.getargspec(self.inner).defaults[0]
# It gets added as a keyword so that lookup in the
# current namespace is really fast.
def _func(_it, _timer, _func=time_func):
setup()
total = 0.0
for _i in _it:
_t0 = _timer()
_func()
_t1 = timer()
total += _t1 - _t0
if teardown:
teardown()
return total
self.inner = _func
请注意,虽然您不会以这种方式获得好时机,因为您一次只能为一次测试计时。不幸的是,我并不聪明,无法找到一种方法来计算多次测试的时间,并且需要为每个调用一个拆卸功能。
或者,您可以修补_template_func
,基本上只是在创建计时器之前从上面复制_func
。如果你想尽可能干净地做到这一点,也许使用mock
进行修补/取消修补是一个好主意(虽然你也可以自己做,没有太多麻烦)。
注意,我们在这里玩过内部的东西 - 这个答案可能会在没有任何警告的情况下随时中断,并且它可能仅适用于CPython,因为这些都没有记录。 < / p>