我正在尝试使用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_set
中time_in_total['data_execution_time']
所花费的总时间(例如code_block_time_elapsed
通常为210秒,以及data_set
所需的总时间{1}}大约150秒,所以差异大约是60秒)。我想知道可能的问题是什么?
some_function
与使用mongoDB
将数据插入bulk.upsert()
有关,data_set
是一个包含7个表的列表,每个表都有100k行。
答案 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
回购中有更多使用示例。希望这会有所帮助。