Python:如何衡量等待I / O所花费的时间?

时间:2014-09-20 20:26:48

标签: python

我在Python脚本中的函数上使用了profile来获取执行时间,并且我使用了Unix time命令来获取realuser和{{ 1}}整个脚本的时间,但是我找不到如何测量在Python中等待I / O所花费的时间。

在我的脚本中,我查询各种数据库,我可以测量发送和接收信息所需的时间吗?

2 个答案:

答案 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())