是否有指定的蟒蛇timeit.timeit()函數拆解的方法嗎? 我知道有'陳述'和'安裝'的論據,但我還沒有找到一個很好的方法來執行拆解。拆解爲蟒蛇timeit.timeit()函數
在我的'Statment'中包含拆解代碼會歪曲我正在嘗試計時的代碼片段的計時。我需要拆卸才能釋放硬件資源,以便我可以使用timeit模塊中的重複功能。
是否有指定的蟒蛇timeit.timeit()函數拆解的方法嗎? 我知道有'陳述'和'安裝'的論據,但我還沒有找到一個很好的方法來執行拆解。拆解爲蟒蛇timeit.timeit()函數
在我的'Statment'中包含拆解代碼會歪曲我正在嘗試計時的代碼片段的計時。我需要拆卸才能釋放硬件資源,以便我可以使用timeit模塊中的重複功能。
不,真的沒有好這樣做的方法。查看source,您可能需要將Timer類繼承爲一個新版本,替換它們的self.inner
。
例如爲:
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,因爲這些都沒有記錄。
不確定你的上下文是什麼,但請記住'安裝程序'只執行一次,而不是每個重複一次... –