优化python';s字符串格式

优化python';s字符串格式,python,optimization,python-3.5,string.format,Python,Optimization,Python 3.5,String.format,我有一个在Python3.5上运行的web服务,它向用户提供一些跟踪消息。跟踪消息以python字符串格式存储在解码器中。每个跟踪都存储一个ID和参数列表。当用户试图获取跟踪时,我循环跟踪并使用跟踪消息格式对其进行格式化 例如: def message(self, parameters=[]): if len(parameters) == 0: return self._message return self._message.format(*parameter

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

例如:

def message(self, parameters=[]):
    if len(parameters) == 0:
        return self._message
    return  self._message.format(*parameters)
参考上面的代码,python中的format函数非常慢。我使用cProfile来分析我的代码,并压缩我能得到的每一个ms,但瓶颈是
string.format()
,因为我必须格式化许多消息。只需几秒钟就可以送达一小份本应送达的样品

所以我的问题是,考虑到我只有很少的字符串格式列表,有没有加快速度的方法?我的意思是,对同一格式字符串进行1000000次解析,然后进行变量替换,效率很低。例如,我可以使用string.Formatter类实现某种缓存吗

请注意,记录道是以
string.format()
格式存储和加载的,因此使用
%
替换格式并不是一个直接的选项,尽管使用该格式至少可以节省一半的时间,并且随着参数数目的增加,可以节省更多的时间

更糟糕的是,
string.format()
与参数数量成线性关系

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

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

我还研究了字符串格式,它看起来效率很低,因为每当使用相同的字符串调用该格式时,它都会反复解析该字符串。我想知道是否有一种方法可以优化格式化程序,使其缓存字符串格式,并避免以前进行的所有解析?

取决于您的
自我。_message
似乎有改进的方法。但是,在不了解自己的情况下,很难提出改进建议,因为这些改进可能不合适。您可以尝试使用和
printf
。不知道是快还是慢。你能不能先对变量进行预处理,然后像
“一些文本后跟变量“+preformated1+”,另一个变量0x“+preformated2
”那样连接字符串?这样你就不需要解析任何东西了。如果将preformatedN替换为
“{:nx}”。格式(N)
,性能是否会提高?诚然,这需要一些重构,但可能不是很好。这取决于你的
自我。_message
看起来有改进的方法。但是,在不了解自己的情况下,很难提出改进建议,因为这些改进可能不合适。您可以尝试使用和
printf
。不知道是快还是慢。你能不能先对变量进行预处理,然后像
“一些文本后跟变量“+preformated1+”,另一个变量0x“+preformated2
”那样连接字符串?这样你就不需要解析任何东西了。如果将preformatedN替换为
“{:nx}”。格式(N)
,性能是否会提高?诚然,这需要一些重构,但它可能是麦汁。