私は、小さくて複雑なprotobufでエンコードされたメッセージをたくさん処理する必要があるpythonプログラムを書いています。私は純粋なpythonで書かれたプロトコルバッファのPython実装を使用しようとしましたが、そのパフォーマンスは本当にひどいです。swigを使ってgoogleプロトコルバッファをバインドする
私は明らかに解決策を探していますsome folks got to work - protocを使ってC++ファイルを生成し、swigを使ってPythonでそれらをラップします。問題は、動作するPythonモジュールに到達できないことです。 に、-includeall
とSWIGを実行している
生成 メッセージクラスによって使用されるすべてのGoogleベース/ユーティリティクラスも包ま取得していることを確認 - 不足しているシステムに文句、SWIGは失敗したファイルが含まれる(例えば、「文字列」) 。 -Iフラグを指定したり、インクルードディレクトリ全体をコピーしたりして、この問題を回避することはできませんでした。環境はUbuntu 10.04、protobuf 2.2.0、swig 1.3.40、gcc 4.4.3です。
は、このフラグを指定しないと、私は私の メッセージクラス用のPythonモジュールを生成することができるよ、しかし、このモジュールは無用です:生成されたPythonの メッセージクラスは、Message ベースクラスによって提供されるすべての機能が欠けている - に特に、逆シリアル化メソッドのうちの1つを除いて、すべてが です。 (MergePartialFromCodedStream)の1つのメソッドは、入力 のCodedInputStream(これは のprotobufインフラストラクチャの一部)のストリームを必要とし、したがって をswigでラップしないため実行されません。
誰かがprotobuf-C++の上でうまく動くようになっている実例があるのだろうか?
また、同じページに記載されているPython拡張などの他の解決策の例がありますか?それは私の動的なスキーマのための高度なメンテナンスソリューションのようだが...
私はGroovyを好んでPythonを削除することを検討している - プロトコルバッファのJava実装がより効率的であると仮定している。それに関するコメント?
ムチャス・グラシアス!
ありがとうございました... Greplinツール(https://github.com/Greplin)を使用してこれを最終的に整理しました。 –