首页 > 解决方案 > 在 Python 3.6 中读取 pickle 的性能比在 Python 2.7 中更差

问题描述

我注意到我的代码的 pickle 读取部分在 Python 3.6 中的执行速度比在 Python 2.7 中的执行速度要慢。这不是一个真正的问题,但我很好奇是什么导致它/是否有任何解释这种差异。我在两个版本中都使用了以下脚本来说明差异。在这里,一个泡菜被导入,然后保存为一个包含 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

标签: pythonpickle

解决方案


当您在 Python 3 中阅读 Python 2 泡菜时,它必须对字符串执行转换

在 Python 2 中,字符串被表示为一个简单的字节流;在 Python 3 中使用 unicode 表示,而不是能够表示更广泛的字符。在 Python 3 中加载 Python 2 泡菜时,它必须将一种格式转换为另一种格式。

这很可能会减慢您的负载。

另请注意,默认执行的转换可能不适合您的使用,您可能希望向负载添加其他参数以确保应用正确的编码。


推荐阅读