为什么 struct.pack 的性能变化如此之大?

Why does struct.pack have such high variability in performance?

我在测试 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

为什么最慢的运行慢了578倍? pack 是否在做一些内部缓存,或者这是某种 CPU 级缓存的结果,还是其他什么?

IPython 探查器就在现场。结果确实被缓存了(至少在某些 python 版本中)。例如在 python 2.7.6 中你可以找到相关代码 here 其中定义了 cache_struct 函数。

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

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


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