【问题标题】:Passing very large objects over XML-RPC in Python在 Python 中通过 XML-RPC 传递非常大的对象
【发布时间】:2020-04-26 20:18:48
【问题描述】:

我一直在处理一些个人项目,并且发现需要将大量数据的处理工作转移到更强大的专用服务器上。我倾向于在 Python 中通过 XML-RPC 执行此操作,并进行了一些有趣的观察,并希望与大家分享,看看是否有人知道更好或更有效的方法。

所以,假设我需要在 Python 中通过 XML-RPC 发送大量数据。最快的方法是什么?

【问题讨论】:

    标签: python json xml-rpc


    【解决方案1】:

    我开始对 XML-RPC 模块进行一些试验,因为网上没有太多关于它的内容。最初,为了处理我的数据(约 15 兆字节),我只是将一个字典对象传递给客户端的 XML-RPC 方法。这在服务器端和客户端都非常慢 - 每个都需要几分钟只是来编码/解码数据!我假设(但不确定)这是一个必须在 XML 中编码大量数据的问题。

    然而,经过一番摆弄,我尝试在客户端将字典序列化为 JSON 对象,并在客户端使用 json.dumps 并在服务器端使用 json.loads 加载它,令我惊讶的是,最终结果是 快很多倍。

    警告:纯属猜测!

    我怀疑XML编码可能比JSON编码慢很多,因为json.dumps是用CPython写的,但我不知道Python的XML编码是不是用CPython写的。我在之前的项目中使用json.dumpsjson.dump 遇到了类似的问题:后者慢很多倍,因为它是用纯Python 编写的;而不是用 CPython 编写的(用 Python 错误报告的话来说,“json.dump 不使用 C 加速”:https://bugs.python.org/msg137170)。

    可以理论上将序列化的 JSON 字符串(或腌制的 dict 对象,但这让我觉得这是个坏主意)上传到云存储,例如 AWS S3,然后在服务器端拉取,但我觉得我还不如直接将数据从一台机器发送到另一台机器。

    我将尝试对序列化的 JSON 字符串进行一些 gzip 压缩,以希望减少成为瓶颈的网络带宽,因为我最终计划能够通过 RPC 处理千兆字节的数据。我会在这里发布我的结果。

    我觉得这很有趣,我想知道以前是否有人遇到过这个问题,以及他们是如何解决的。我一直无法在网上找到很多。干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      相关资源
      最近更新 更多