【问题标题】:Python JSON RPC server with ability to stream具有流式传输能力的 Python JSON RPC 服务器
【发布时间】:2010-12-15 07:07:58
【问题描述】:

我遇到过一些关于实现 python JSON RPC 服务器的指南和包,例如:

在服务器/应用程序实现非常简单的意义上,它们都做得很好,您只需返回 python 对象作为结果,框架会负责序列化它。但是,这不适合我的需求,主要是因为我期待从数据库中序列化可能的数千条记录,而这样的解决方案需要我创建一个包含所有记录的单个 python 对象并将其作为结果返回。

我正在寻找的理想解决方案将涉及一个框架,该框架将为应用程序提供一个用于写入响应的流和一个 JSON 编码器,该编码器可以动态编码迭代器(在本例中为来自 pyodbc 的游标),例如这个:

def process(self, request, response):
  // retrieve parameters from request.

  cursor = self.conn.cursor()
  cursor.execute(sql) // etc.

  // Dump the column descriptions and the results (an iterator)
  json.dump(response.getOut(), [cursor.description, cursor])

谁能给我一个服务器框架,它可以为我提供一个要写入的流和一个 json 序列化框架,它可以处理诸如 pyodbc 光标之类的可迭代对象并即时对其进行序列化。

【问题讨论】:

    标签: python json rpc


    【解决方案1】:

    如果典型的 JSON-RPC 框架不允许你有效地转储这么大的数据,为什么不直接使用 HTTP 服务器并返回 json 数据,这样你就可以流式传输和读取流式数据,好在你甚至可以gzip 以加快传输速度,您也可以使用许多标准服务器,例如阿帕奇。

    【讨论】:

    • 感谢您的建议,稍后我将探讨此选项。现在,我不会从像这样的流式传输 json 中获得任何直接的好处,原因有两个: - 我还没有找到可以让我即时流式传输的 json 库 - 即使我能够从 python 流式传输,客户端无法在内存中没有整个 json 字符串的情况下对其进行反序列化,因此它不能立即开始使用它。我将不得不进一步分析什么会更好地锻炼。
    • 可以一个一个转储json对象
    • 我认为 JSON 规范需要一个顶级容器,因此除非您使用的 JSON 库支持此概念,否则这将不起作用。例如,在我尝试过的两个 R 库中,一个提供了一个解析器,它可以在对象被实例化后立即为您提供对象(addData() 后跟 getObject()),但两者都提供了一个无法解析的 toJSON()这样的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2021-12-12
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 2013-05-11
    相关资源
    最近更新 更多