LoginSignup
23
25

More than 5 years have passed since last update.

Pythonで高速なRPCを実装する

Last updated at Posted at 2015-01-04

Pythonで高速なRPCを実装するためのライブラリであるMprpcを紹介します。

内部では、MessagePack RPCプロトコルを用いていて、Java、C++、PHP、Rubyなど既存の他言語のクライアントとも通信が可能になっています。

下記のように簡単にRPCサーバを記述することが出来ます。

sum_server.py
from gevent.server import StreamServer
from mprpc import RPCServer

class SumServer(RPCServer):
    def sum(self, x, y):
        return x + y

server = StreamServer(('127.0.0.1', 6000), SumServer())
server.serve_forever()

RPCServerクラスを継承してメソッドを定義すると、定義されたメソッドが自動的にRPCの関数として登録されます。

sum_client.py
from mprpc import RPCClient

client = RPCClient('127.0.0.1', 6000)
print client.call('sum', 1, 2)

このような感じでクライアントを記述できます。

$ python sum_server.py &
[1] 30945
$ python sum_client.py
3

最後に、既存の公式MessagePack RPC実装(Tornadoベース)及びdotCloudのZeroRPCとパフォーマンスを比較してみます。使用しているコードはこちらにあります。

% python benchmarks/benchmark.py
call: 9508 qps
call_using_connection_pool: 10172 qps

% pip install msgpack-rpc-python
% python benchmarks/benchmark_msgpackrpc_official.py
call: 4976 qps

% pip install zerorpc
% python benchmarks/benchmark_zerorpc.py
call: 655 qps

パフォーマンス比較

既存のMessagePack RPCクライアントの約2倍、ZeroRPCの約14倍高速に動作していることが分かります。

23
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
25