优化python的string.format

时间:2017-07-31 14:04:50

标签: python optimization python-3.5 string.format

我有一个在Python 3.5上运行的Web服务,它向用户提供一些跟踪消息。跟踪消息以python字符串格式存储在解码器中。每条跟踪都存储一个ID和参数列表。当用户尝试获取跟踪时,我遍历跟踪并使用跟踪消息格式对其进行格式化。

例如:

def message(self, parameters=[]):
    if len(parameters) == 0:
        return self._message
    return  self._message.format(*parameters)

参考上面的代码,python中的格式函数非常慢。我已经使用cProfile来分析我的代码并挤压我可以获得的每一个ms,但瓶颈是string.format(),因为我必须格式化许多消息。只需几秒钟即可提供应该服务的一小部分样本。

所以我的问题是,无论如何要加快速度,事实上我只有很少的字符串格式列表?我的意思是解析相同的格式字符串1000000次然后执行变量替换效率很低。我可以使用string.Formatter类实现某种缓存吗?

只需注意跟踪以string.format()格式存储和加载,因此使用%替换格式不是直接选项,即使它使用该格式节省至少一半的时间并节省随着参数数量的增加,甚至更多。

让事情变得更糟的是string.format()需要线性时间和参数数量!

跟踪消息通常包含一些字符串,其中一些参数需要替换为十进制或十六进制数字,如下所示:

"Some text followed by variable {:0d} , Other variable 0x{:08X}"

我也查看了PEP 3101,看起来字符串格式效率低,因为只要使用相同的字符串调用format,它就会反复解析字符串。我想知道是否有一种优化格式化程序的方法,以便它缓存字符串格式并避免所有解析,如果它之前完成?

0 个答案:

没有答案