Python JSON RPC服务器具备流式传输功能

3
我发现了一些关于实现Python JSON RPC服务器的指南和包,例如: 它们在某种意义上都做得很好,因为服务器/应用程序实现非常简单,您只需将Python对象作为结果返回,框架会负责序列化它。然而,这不适合我的需求,主要是因为我希望序列化可能来自数据库的数千条记录,这样的解决方案需要我创建一个包含所有记录的单个Python对象并将其作为结果返回。
我正在寻找的理想解决方案将涉及一个框架,该框架将为应用程序提供写入响应的流以及能够即时编码迭代器(在此情况下为来自pyodbc的游标)的JSON编码器,类似于以下内容:
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游标这样的可迭代对象,并且可以实时序列化它。

1个回答

2
如果典型的JSON-RPC框架不能有效地转储这样大量的数据,为什么不使用HTTP服务器并返回JSON数据呢?这样你就可以流式传输和读取数据。更好的是,你甚至可以对其进行gzip压缩以加快传输速度,而且你还可以使用许多标准服务器,例如Apache。

谢谢您的建议,我稍后会探索这个选项。现在,我不会立即从流式JSON中获得任何好处,因为有两个原因:
  • 我还没有找到一个能让我实时流式传输的JSON库
  • 即使我能从Python进行流式传输,客户端也无法在没有整个JSON字符串的情况下反序列化它,所以它不能立即开始使用。
我将进一步分析哪种方法更好。
- haridsv
你可以逐个转储JSON对象。 - Anurag Uniyal
2
我认为JSON规范要求顶层只有一个容器,因此,除非您使用的JSON库支持此概念,否则这将无法工作。例如,在我尝试的两个R库中,其中一个提供了一个解析器,可以在实例化对象后立即将其作为对象返回(addData()后跟getObject()),但是两者都提供了一个toJSON(),无法解析这样的字符串。 - haridsv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接