由于我的脚本处理大量数据,我一直在分析它以缩短执行时间。经过长时间的运行,我发现了这个惊人的结果:
ncalls tottime percall cumtime percall filename:lineno(function)
190158700 2488.387 0.000 5282.776 0.000 bitcoin_types.py:214(_read)
17483627 1523.197 0.000 3385.274 0.000 script.py:124(parse)
17479677 1289.881 0.000 1289.881 0.000 {method 'Put' of 'leveldb.LevelDB' objects}
52439034 1279.769 0.000 2234.548 0.000 StringIO.py:208(write)
201841 1127.547 0.006 17186.404 0.085 validate.py:35(block)
248980529 1089.813 0.000 1089.813 0.000 {len}
15064476 1021.241 0.000 1021.241 0.000 {method 'Delete' of 'leveldb.LevelDB' objects}
26434944 1010.258 0.000 1010.258 0.000 {method 'Get' of 'leveldb.LevelDB' objects}
63334845 896.935 0.000 2904.124 0.000 bitcoin_types.py:222(read_uint8)
152052558 896.330 0.000 896.330 0.000 {method 'update' of '_hashlib.HASH' objects}
144965272 819.315 0.000 819.315 0.000 {method 'read' of 'file' objects}
你可以看到tottime = 2488.387
,据我所知,这是运行函数的总时间,不包括cumtime
包含的内部调用。令人惊讶的是_read
是一个非常小的功能:
def _read(f, n, h=None):
data = f.read(n)
if h is not None:
h.update(data)
return data
_read
与tottime
相比,cumtime
与cumtime >>>>> tottime
相比如何变长,即使它除了调用其他函数之外什么都没有?我期待is not None
! try-except
这么贵的手术吗?我应该{{1}}吗?