我在Python脚本中的函数上使用了profile
来获取执行时间,并且我使用了Unix time命令来获取real
,user
和{{ 1}}整个脚本的时间,但是我找不到如何测量在Python中等待I / O所花费的时间。
在我的脚本中,我查询各种数据库,我可以测量发送和接收信息所需的时间吗?
答案 0 :(得分:2)
您可以使用这样的Decorator来衡量专用方法的执行时间:
import time
def measure_time(f):
def timed(*args, **kw):
ts = time.time()
result = f(*args, **kw)
te = time.time()
print '%r (%r, %r) %2.2f sec' % \
(f.__name__, args, kw, te-ts)
return result
return timed
你可以像这样使用它:
@measure_time
def foo():
#content of function
请注意f.__name__
返回函数名称! (在这种情况下' foo')
答案 1 :(得分:0)
如果只想测量花费在I / O上的时间(忽略花费在CPU上的时间),则可以编写一个自定义计时器函数:
import os
def io_timer():
timing = os.times()
return timing.elapsed - (timing.system + timing.user)
并将其传递给cProfile
:
import cProfile, pstats
def profile_io_time(f, *args, **kwargs):
prof = cProfile.Profile(io_timer)
prof.runcall(f, *args, **kwargs)
result = pstats.Stats(prof)
result.sort_stats("time")
result.print_stats()
您可以这样使用它:
from urllib.request import urlopen
profile_io_time(lambda: urlopen("https://google.com").read())