python - 在 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
解决方案
当您在 Python 3 中阅读 Python 2 泡菜时,它必须对字符串执行转换
在 Python 2 中,字符串被表示为一个简单的字节流;在 Python 3 中使用 unicode 表示,而不是能够表示更广泛的字符。在 Python 3 中加载 Python 2 泡菜时,它必须将一种格式转换为另一种格式。
这很可能会减慢您的负载。
另请注意,默认执行的转换可能不适合您的使用,您可能希望向负载添加其他参数以确保应用正确的编码。
推荐阅读
- swift - 为什么我的 NSMenuItem 在有操作时被禁用?
- fonts - UFO 字体中的字形点是如何给出的?
- image-processing - ImageMagick v7 失真
- mysql - Spring JPA @Query with JPQL and MySQL FUNCTION CONVERT(col USING charset)
- c - 用户输入字符串(使用 fgets)中最后一个字符的 ASCII 值输出为 10,而预期值为 0
- c# - 更快地在列表中查找特定项目
- php - PHP:如何按键长度排序,然后按键 asc?
- java - REST API 中的 Jersey 多部分表单数据既不使用 web.xml 也不使用 ResourceConfig
- html - 按图像替换项目符号
- java - 如何在用户登录并想用新密码更改旧密码时验证用户