奇怪的Python分析结果:小函数需要很长时间

时间:2014-01-15 04:18:43

标签: python profiling

由于我的脚本处理大量数据,我一直在分析它以缩短执行时间。经过长时间的运行,我发现了这个惊人的结果:

   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

_readtottime相比,cumtimecumtime >>>>> tottime相比如何变长,即使它除了调用其他函数之外什么都没有?我期待is not Nonetry-except这么贵的手术吗?我应该{{1}}吗?

0 个答案:

没有答案