Reading pickle 在 Python 3.6 中比在 Python 2.7 中表现更差
Reading pickle performs worse in Python 3.6 than in Python 2.7
我注意到我的代码的 pickle 读取部分在 Python 3.6 中比在 Python 2.7 中执行得慢。这不是一个真正的问题,但我很好奇是什么导致了 it/if 对于这种差异有任何解释。
我在两个版本中都使用了以下脚本来说明差异。在这里,一个泡菜被导入,然后保存为一个包含 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
当你在 Python 3 中读取 Python 2 pickle 时,它必须对字符串进行转换
在Python2中,字符串被表示为简单的字节流;在 Python 3 中使用了 unicode 表示法,它能够表示范围更广的字符。当您在 Python 3 中加载 Python 2 pickle 时,它必须将一种格式转换为另一种格式。
这很可能会降低您的加载速度。
另请注意,默认执行的转换可能不适合您的使用,您可能希望向负载添加其他参数以确保应用正确的编码。
我注意到我的代码的 pickle 读取部分在 Python 3.6 中比在 Python 2.7 中执行得慢。这不是一个真正的问题,但我很好奇是什么导致了 it/if 对于这种差异有任何解释。 我在两个版本中都使用了以下脚本来说明差异。在这里,一个泡菜被导入,然后保存为一个包含 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
当你在 Python 3 中读取 Python 2 pickle 时,它必须对字符串进行转换
在Python2中,字符串被表示为简单的字节流;在 Python 3 中使用了 unicode 表示法,它能够表示范围更广的字符。当您在 Python 3 中加载 Python 2 pickle 时,它必须将一种格式转换为另一种格式。
这很可能会降低您的加载速度。
另请注意,默认执行的转换可能不适合您的使用,您可能希望向负载添加其他参数以确保应用正确的编码。