python - 在 Python 中通过 XML-RPC 传递非常大的对象
问题描述
我一直在搞一些个人项目,并且发现需要将大量数据的处理工作转移到更强大的专用服务器上。我倾向于在 Python 中通过 XML-RPC 执行此操作,并进行了一些有趣的观察,并希望与大家分享,看看是否有人知道更好或更有效的方法。
因此,假设我需要在 Python 中通过 XML-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 处理千兆字节的数据。我会在这里发布我的结果。
我认为这很有趣,我想知道以前是否有人遇到过这个问题,以及他们是如何解决的。我一直无法在网上找到很多。干杯!
推荐阅读
- node.js - 如何在不使用 http 模块的情况下创建 socket.io 服务器?
- html - 将鼠标悬停在 h1 上时箭头光标变为竖线
- javascript - 在 iframe 内按空格可滚动外页
- python - 如何避免使用 Django 模型表单进行重复的 SQL 查询?
- java - 如何在另一个线程中运行的 classLoader 小程序中 JNI FindClass
- c++ - 错误:我的 vscode 终端上的“int”之前的预期主表达式
- css - 在 li 元素内具有 flex 属性的中心锚元素
- r - 根据每门课程的名额和学生排名分配愿望
- rust - 将上下文移动到几个闭包中?
- angular - 你可以转换 switchMap observable 的结果来获取它的值而不是 observable 本身吗?