【问题标题】:Pickle+gzip - how to utilise multiple cores?Pickle+gzip - 如何利用多核?
【发布时间】:2012-06-18 23:49:37
【问题描述】:

我正在使用简单的函数在开始工作之前恢复状态:

import pickle, gzip
def load(filename):
    """Loads a compressed object from disk
    """
    file = gzip.GzipFile(filename, 'rb')
    return pickle.load(file)        
records_df = load("records_all_in_one.gzp")

问题是恢复状态是我的应用程序的瓶颈。有什么简单的方法可以告诉 gzip/pickle 组合使用多处理?

当然,我总是可以拆分数据结构并从多个内核上的多个文件中读取它,但我更愿意看看是否有更聪明的方法来做到这一点。

最后一点信息 - 正在恢复的数据是一个大的 pandas DataFrame。

【问题讨论】:

    标签: python gzip pickle


    【解决方案1】:

    您可以运行 pigz 子进程,这是 gzip 的并行实现。

    【讨论】:

      【解决方案2】:

      另一种方法是运行并行 gzip 实现并使用 python 处理未压缩的数据。

      您可以使用 subprocess 运行 gzip 实例或使用管道并通过标准输入读取数据。

      【讨论】:

      • 听起来不错 - 是否有用于 python 的 gzip 并行版本?我想让它尽可能地独立于平台
      • @petr 我认为他的意思是利用subprocess 模块。
      • @JAB 仍然 - 您需要在某处拥有 gzip 二进制文件,而不是仅使用 python 的解决方案
      【解决方案3】:

      您可以尝试使用cPickle,因为它是up to 1000 times faster than pickle

      【讨论】:

      • 根据他使用的 Python 版本,pickle 很可能只是 cPickle 的包装器(如果可用)。 (我相信 Python 3 可以做到这一点。)
      • 我们开始吧,第一行在docs.python.org/py3k/library/…。不过,现在是 _pickle 而不是 cPickle
      猜你喜欢
      • 2010-09-26
      • 2012-09-01
      • 1970-01-01
      • 2020-12-14
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 2012-07-23
      相关资源
      最近更新 更多