Mettre en œuvre un RPC rapide en Python

Présentation de Mprpc, une bibliothèque pour l'implémentation de RPC haute vitesse en Python.

En interne, il utilise le protocole MessagePack RPC et les [autres clients de langage] existants (https://github.com/msgpack-) tels que Java, C ++, PHP et Ruby. La communication avec rpc / msgpack-rpc) est également possible.

Vous pouvez facilement écrire un serveur RPC comme indiqué ci-dessous.

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()

Lorsque vous définissez une méthode en héritant de la classe * RPCServer *, la méthode définie est automatiquement enregistrée en tant que fonction RPC.

sum_client.py


from mprpc import RPCClient

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

Vous pouvez écrire le client comme ceci.

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

Enfin, comparez les performances avec l'implémentation officielle existante de MessagePack RPC (basée sur Tornado) et dotCloud Zero RPC. Je vais essayer. Le code que j'utilise peut être trouvé ici (https://github.com/studio-ousia/mprpc/tree/master/benchmarks).

% 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

パフォーマンス比較

Vous pouvez voir qu'il s'exécute environ deux fois plus vite que le client MessagePack RPC existant et environ 14 fois plus vite que Zero RPC.

Recommended Posts

Mettre en œuvre un RPC rapide en Python
Mettre en œuvre des recommandations en Python
Implémenter sum en Python
Implémenter Traceroute dans Python 3
Implémenter d'anciens chiffrements en python
Implémenter Redis Mutex en Python
Implémenter l'extension en Python
Implémenter l'algorithme de Dijkstra en python
Implémenter le bot de discussion Slack en Python
Mettre en œuvre l'apprentissage de l'empilement en Python [Kaggle]
Implémenter la fonction power.prop.test de R en python
Implémenter le modèle Singleton en Python
Implémentez rapidement l'API REST en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
J'ai essayé d'implémenter PLSA en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Implémenter __eq__ etc. de manière générique dans la classe Python
Méta-analyse en Python
Unittest en Python
Implémenter le filtre FIR en langage Python et C
Mettre en œuvre collectivement des tests d'hypothèses statistiques en Python
J'ai essayé d'implémenter PLSA dans Python 2
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
N-Gram en Python
Programmation avec Python
Plink en Python
J'ai essayé d'implémenter ADALINE en Python
Constante en Python
J'ai essayé d'implémenter PPO en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python