====== RPC ====== ===== XMLRPC ===== * 동시에 여러 커넥션 처리(threading) from socketserver import ThreadingMixIn class ThreadedXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer): pass class RequestHandler(SimpleXMLRPCRequestHandler): rpc_paths = ('/RPC2',) with ThreadedXMLRPCServer((ip_address, port), requestHandler=RequestHandler, allow_none=True, logRequests=False) as server: server.register_introspection_functions() def ping(): return 'pong' server.register_function(ping, 'ping') server.serve_forever() * https://stackoverflow.com/questions/1589150/python-xmlrpc-with-concurrent-requests ===== msgpack-rpc ===== * https://github.com/msgpack-rpc/msgpack-rpc-python * https://github.com/lebedov/msgpack-numpy ==== 설치 ==== pip install msgpack-rpc-python pip install msgpack-numpy ==== server ==== import msgpack import msgpack_numpy as m m.patch() import numpy as np import msgpackrpc class SumServer(object): def sum(self, x, y): return x + y server = msgpackrpc.Server(SumServer()) server.listen(msgpackrpc.Address("localhost", 18800)) server.start() ==== client ==== import msgpack import msgpack_numpy as m m.patch() import numpy as np import msgpackrpc client = msgpackrpc.Client(msgpackrpc.Address("localhost", 18800)) result = client.call('sum', 1, 2) # = > 3 result = client.call('sum', np.arange(10), np.arange(10, 20)) ===== zerorpc ===== * https://github.com/0rpc/zerorpc-python