首页 > 解决方案 > 在 Python 中通过 XML-RPC 传递非常大的对象

问题描述

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

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

标签: pythonjsonxml-rpc

解决方案


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

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

警告:纯属猜测!

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

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

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

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


推荐阅读