需要此代码的帮助
import timeit
mysetup=""
mycode='''
def gener():
...my code here...
return x
'''
# timeit statement
print (timeit.timeit(setup = mysetup,
stmt = mycode,
number = 1000000))
print("done")
结果我得到0.0008606994517737132 当我读到这个单位是在"秒" 所以我的功能在0.8毫秒内执行了100万次? 我认为这不是真的,太快了。
我也试过基本选项
start = time.time()
my code here
end = time.time()
print(end - start)
得到0.23901081085205078一次性执行似乎有点慢......
那么我做错了什么? 感谢
答案 0 :(得分:2)
您在mycode
方法中为timeit
方法定义此方法的方式,所有将要发生的函数gener
将被定义,而不是运行。您需要在代码块中运行该函数,以报告执行所需的时间。
至于合理的时间长度(太快/太慢),这在很大程度上取决于你的代码在做什么。但是我怀疑你已经在方法2中执行了该函数,并且只在方法1中定义了它,因此存在差异。
为了说明差异,在下面的示例中,块code1
只定义了一个函数,它不执行它。块code2
定义并执行该函数。
import timeit
code1 = '''
def gener():
time.sleep(0.01)
'''
code2 = '''
def gener():
time.sleep(0.01)
gener()
'''
我们应该预计运行time.sleep(0.01)
100次需要大约1秒钟。为timeit
运行code1
会返回~10 ^ -5秒,因为实际上没有调用函数gener
:
timeit.timeit(stmt=code1, number=100)
为timeit
运行code2
会返回约1秒的预期结果:
timeit.timeit(stmt=code2, number=100)
除此之外,setup
参数的要点是进行设置(代码中不打算定时的部分)。如果您希望timeit
捕获gener
的执行时间,则应使用此项:
import timeit
setup = '''
def gener():
time.sleep(0.01)
'''
stmt = "gener()"
timeit.timeit(setup=setup, stmt=stmt, number=100)
这将返回运行 gener
100次所需的时间,不包括定义它所花费的时间。
答案 1 :(得分:0)
如果你想时间函数timeit可以像这样使用:
# defining some function you want to time
def test(n):
s = 0
for i in range(n):
s += i
return s
# defining a function which runs the function to be timed with desired input arguments
timed_func = lambda : test(1000)
# the above is done so that we have a function which takes no input arguments
N = 10000 # number of repeats
time_per_run = timeit.timeit(stmt=timed_func, number=N)/N
根据您的情况,您可以这样做:
# defining some function you want to time
def gener():
...my code here...
return x
N = 1000000 # number of repeats
time_per_run = timeit.timeit(stmt=gener, number=N)/N
任何图书馆的导入都可以在调用timeit函数之前全局完成,timeit将使用全局导入的库
e.g。
import numpy as np
# defining some function you want to time
def gener():
...my code here...
x = np.sqrt(y)
return x
N = 1000000 # number of repeats
time_per_run = timeit.timeit(stmt=gener, number=N)/N
答案 2 :(得分:0)
工作代码
# importing the required module
import timeit
# code snippet to be executed only once
mysetup = '''
from collections import OrderedDict
def gener():
some lines of code here
return x'''
# code snippet whose execution time is to be measured
mycode="gener()"
# timeit statement
nb=10
print("The code run {} time in: ".format(nb ))
print("{} secondes".format(timeit.timeit(setup = mysetup,
stmt = mycode,
number = nb)))
print("done")
执行时间与下面的执行时间几乎相同
start = time.time()
my code here
end = time.time()
print(end - start)
时间为0.23秒,基本测量代码高于0.24,它们都有波动...
谢谢,问题解决了
答案 3 :(得分:0)
这是一种测量代码段时间的通用方法。
import time
class timer(object):
"""
A simple timer used to time blocks of code. Usage as follows:
with timer("optional_name"):
some code ...
some more code
"""
def __init__(self, name=None):
self.name = name
def __enter__(self):
self.start = time.time()
return self
def __exit__(self, *args):
self.end = time.time()
self.interval = self.end - self.start
if self.name:
print("{} - Elapsed time: {:.4f}s".format(self.name, self.interval))
else:
print("Elapsed time: {:.4f}s".format(self.interval))
要点在这里可用:https://gist.github.com/Jakobovski/191b9e95ac964b61e8abc7436111d1f9