为什么struct.pack在性能上有如此高的可变性?

Tho*_*son 11 python performance struct

测试性能时,我得到以下结果struct.pack:

In [3]: %timeit pack('dddd', 1.0, 1.0, 1.0, 1.0)
The slowest run took 578.59 times longer than the fastest. This could
mean that an intermediate result is being cached 
1000000 loops, best of 3: 197 ns per loop
Run Code Online (Sandbox Code Playgroud)

为什么最慢的运行速度慢578倍?包执行一些内部缓存,或者这是某种CPU级缓存的结果,还是其他什么?

Bak*_*riu 1

IPython 分析器非常准确。结果确实被缓存了(至少在某些Python版本中)。例如,在 python 2.7.6 中,您可以在此处cache_struct找到定义函数的相关代码。

该函数查找缓存以查看最近是否使用了给定的格式并返回相关Struct实例,而不是创建一个新实例(这似乎相对昂贵)。

您可以看到它在pack函数(和其他函数)中使用。


此内容发布在评论中,但值得作为答案。