Python使用time.time()测量代码块的运行时间

时间:2016-06-07 15:16:44

标签: mongodb python-3.x time timer

我正在尝试使用time.time()来衡量代码块的已用时间,

import time
func_time_result = []
t2 = time.time()

for data in data_set:
   data_time = dict()
   t4 = time.time()
   # initialization code for running the function

   try:
      some_function(data)
   except Exception1 as e:
      exception_list.append(e)
   except Exception2 as e:
      exception_list.append(e)
   data_time.data_execution_time = time.time() - t4 # iteration execution time

   func_time_result.append(data_time)

t3 = time.time()
code_block_time_elapsed = t3-t2

time_in_total = dict()
for time in func_time_result:
   for k, v in time.items():
      time_in_total[k] += v

问题是code_block_time_elapsed不等于data_settime_in_total['data_execution_time']所花费的总时间(例如code_block_time_elapsed通常为210秒,以及data_set所需的总时间{1}}大约150秒,所以差异大约是60秒)。我想知道可能的问题是什么?

some_function与使用mongoDB将数据插入bulk.upsert()有关,data_set是一个包含7个表的列表,每个表都有100k行。

1 个答案:

答案 0 :(得分:0)

有一个名为jackedCodeTimerPy的非常好的库比时间模块更好。它还有一些聪明的错误检查,所以你可能想尝试一下。

它提供了非常好的报告,如

label            min          max         mean        total    run count
-------  -----------  -----------  -----------  -----------  -----------
imports  0.00283813   0.00283813   0.00283813   0.00283813             1
loop     5.96046e-06  1.50204e-05  6.71864e-06  0.000335932           50

我喜欢它如何为您提供有关它的统计信息以及计时器运行的次数。

使用简单。如果我想测量for循环中的时间代码,我只需执行以下操作:

from jackedCodeTimerPY import JackedTiming
JTimer = JackedTiming()

for i in range(50):
  JTimer.start('loop')  # 'loop' is the name of the timer
  doSomethingHere = 'This is really useful!'
  JTimer.stop('loop')
print(JTimer.report())  # prints the timing report

您也可以同时运行多个计时器。

JTimer.start('first timer')
JTimer.start('second timer')
do_something = 'amazing'
JTimer.stop('first timer')

do_something = 'else'
JTimer.stop('second timer')

print(JTimer.report())  # prints the timing report

回购中有更多使用示例。希望这会有所帮助。

https://github.com/BebeSparkelSparkel/jackedCodeTimerPY