2009-11-11 60 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