在Python 3.6中读取pickle比在Python 2.7中表现更差。

4

我注意到在Python 3.6中,我的代码中pickle读取部分的表现比在Python 2.7中要慢。虽然这并不是问题,但我很好奇这是什么原因/是否有任何解释这种差异的方法。我在两个版本中都使用了以下脚本来说明差异。 在这里,一个pickle被导入,然后保存为包含14804726行和10列的数据帧:

import pandas as pd
import time

timestart=time.time()
picklefile=r'C:\Users\Me\rawdata.pkl'  
rawdata = pd.read_pickle(picklefile)

print(time.time()-timestart)

这将产生以下时间输出:

>>>Output 2.7.14: 14.9129998684
>>>Output 3.6.4: 60.39831018447876

3
你是否在两次加载之间将Python 2格式的pickle更改为Python 3格式?或者试图两次加载Python 2格式的pickle? - Jack Aidley
后者。我用另一个Python 2代码创建了一个pickle,现在我正在尝试在两个版本中导入相同的pickle。 - A T
1个回答

4
当你在Python 3中读取Python 2的pickle时,字符串需要进行转换。在Python 2中,字符串被表示为简单的字节流;而在Python 3中,则使用unicode表示,可以表示更广泛的字符范围。当你在Python 3中加载Python 2的pickle时,它必须将一种格式转换为另一种格式。很可能正是这个过程导致了加载速度变慢。请注意,默认情况下执行的转换可能不适合您的用途,您可能希望添加其他参数来确保应用正确的编码。

我仅仅使用Python 3脚本导入和导出了Python 2中的pickle。使用这种新的pickle格式,上述代码大约需要4.0秒钟! - A T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接