我正在尝试构建一个工具来测试我的Internet连接的延迟,更具体地说是网站加载时间。 我想到了将python request模块用于加载部分。
问题是,它没有内置功能来衡量获得完整响应所花费的时间。 为此,我认为我将使用timeit
模块。
我不确定的是,如果我像这样运行timeit:
t = timeit.Timer("requests.get('http://www.google.com')", "import requests")
我实际上是在衡量响应到达所花费的时间,还是建立,发送,接收请求等所花费的时间? 我猜我可能会忽略执行时间,因为我正在测试延迟很长的网络(〜700ms)?
有没有更好的方法以编程方式执行此操作?
我正在尝试计时一些代码。 首先,我使用了一个定时装饰器:
#!/usr/bin/env python
import time
from itertools import izip
from random import shuffle
def timing_val(func):
def wrapper(*arg, **kw):
'''source: http://www.daniweb.com/code/snippet368.html'''
t1 = time.time()
res = func(*arg, **kw)
t2 = time.time()
return (t2 - t1), res, func.__name__
return wrapper
@timing_val
def time_izip(alist, n):
i = iter(alist)
return [x for x in izip(*[i] * n)]
@timing_val
def time_indexing(alist, n):
return [alist[i:i + n] for i in range(0, len(alist), n)]
func_list = [locals()[key] for key in locals().keys()
if callable(locals()[key]) and key.startswith('time')]
shuffle(func_list) # Shuffle, just in case the order matters
alist = range(1000000)
times = []
for f in func_list:
times.append(f(alist, 31))
times.sort(key=lambda x: x[0])
for (time, result, func_name) in times:
print '%s took %0.3fms.' % (func_name, time * 1000.)
产量
% test.py
time_indexing took 73.230ms.
time_izip took 122.057ms.
在这里我使用timeit:
% python - m timeit - s '' 'alist=range(1000000);[alist[i:i+31] for i in range(0, len(alist), 31)]'
10 loops, best of 3:
64 msec per loop
% python - m timeit - s 'from itertools import izip' 'alist=range(1000000);i=iter(alist);[x for x in izip(*[i]*31)]'
10 loops, best of 3:
66.5 msec per loop
使用timeit时,结果实际上是相同的,但是使用定时修饰器时,显示time_indexing
的速度比time_izip
快。
是什么造成了这种差异?
应该相信这两种方法吗?
如果是这样?
我试图找出执行Python语句需要多长时间,所以我在线查看并发现标准库提供了一个名为timeit的模块,其目的是做到这一点:
import timeit
def foo():
# ... contains code I want to time ...
def dotime():
t = timeit.Timer("foo()")
time = t.timeit(1)
print "took %fs\n" % (time,)
dotime()
但是,这会产生错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in dotime
File "/usr/local/lib/python2.6/timeit.py", line 193, in timeit
timing = self.inner(it, self.timer)
File "<timeit-src>", line 6, in inner
NameError: global name 'foo' is not defined
我还是Python新手,我不完全理解它所有的范围问题,但我不知道为什么这个片段不起作用。 有什么想法吗?
我正在玩timeit并注意到对一个小字符串做一个简单的列表理解比在一个小的单个字符串列表上做同样的操作要花费更长的时间。 任何解释? 这几乎是1.35倍的时间。
>>> from timeit import timeit
>>> timeit("[x for x in 'abc']")
2.0691067844831528
>>> timeit("[x for x in ['a', 'b', 'c']]")
1.5286479570345861
在较低的水平上发生了什么导致这种情况?
我试图找出执行Python语句需要多长时间,所以我在线查看并发现标准库提供了一个名为timeit的模块,其目的是做到这一点:
import timeit
def foo():
# ... contains code I want to time ...
def dotime():
t = timeit.Timer("foo()")
time = t.timeit(1)
print "took %fs\n" % (time,)
dotime()
但是,这会产生错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in dotime
File "/usr/local/lib/python2.6/timeit.py", line 193, in timeit
timing = self.inner(it, self.timer)
File "<timeit-src>", line 6, in inner
NameError: global name 'foo' is not defined
我还是Python新手,我不完全理解它所有的范围问题,但我不知道为什么这个片段不起作用。 有什么想法吗?
在Python中创建新空列表的最佳方法是什么?
l = []
要么
l = list()
我问这个是因为两个原因:
我理解insertion_sort
的概念,但我不知道如何在我的代码中实现它。
我如何比较两个函数,比如insertion_sort
和tim_sort
,以及timeit
?
我想要的是在我的代码中的某个地方开始计算时间,然后获得通过的时间,以测量执行少量功能所花费的时间。 我认为我使用的是timeit模块错误,但文档对我来说只是让人困惑。
import timeit
start = timeit.timeit()
print "hello"
end = timeit.timeit()
print end - start