2009-11-11 105 views
3

我所遇到的一些指南和包上实现的Python JSON RPC服务器,能力如:Python的JSON RPC服务器以流

它们在服务器/应用程序实现非常简单的意义上做得很好,你只需返回python对象,并且框架采用c正在序列化它。但是,这并不适合我的需要,主要是因为我期待从数据库中序列化数千条记录,并且这种解决方案需要我创建一个包含所有记录的单个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光标和序列化的飞行。

回答

2

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

+0

感谢您的建议,我会在稍后探讨此选项。现在,我不会立即获得像这样流式传输json的好处,因为两个原因: - 我还没有找到一个json库,它可以让我即时流式传输 - 即使我能够从python ,客户端无法在没有整个json字符串的情况下将其反序列化,因此它不会立即开始使用它。 我将不得不做更进一步的分析,以便更好地锻炼。 – haridsv

+0

你可以一个一个地转储json对象 –

+2

我认为JSON规范要求在顶层有一个容器,所以这不起作用,除非你使用的JSON库支持这个概念。例如,在我尝试的两个R库中,有一个给出了一个解析器,它可以在实例化后立即为您提供对象(addData()后跟getObject()),但都给出toJSON(),解析失败这种字符串。 – haridsv