zoukankan      html  css  js  c++  java
  • python实现远程方法调用

    先实现server端

    import json
    from multiprocessing.connection import Listener
    from threading import Thread
    
    
    class RPCHandler:
        def __init__(self):
            self._functions = {}
    
        def register_function(self, func):
            self._functions[func.__name__] = func
    
        def handle_connection(self, connection):
            try:
                while True:
                    func_name, args, kwargs = json.loads(connection.recv())
                    # Run the RPC and send a response
                    try:
                        r = self._functions[func_name](*args, **kwargs)
                        connection.send(json.dumps(r))
                    except Exception as e:
                        connection.send(json.dumps(e))
            except EOFError:
                pass
    
    
    def rpc_server(handler, address, authkey):
        sock = Listener(address, authkey=authkey)
        while True:
            client = sock.accept()
            t = Thread(target=handler.handle_connection, args=(client,))
            t.daemon = True
            t.start()
    
    
    # Some remote functions
    def add(x,y):
        return x+y
    
    
    if __name__ == '__main__':
        handler = RPCHandler()
        handler.register_function(add)
        # Run the server
        rpc_server(handler, ('127.0.0.1', 17000), authkey=b'peekaboo')

    再实现client端

    import json
    from multiprocessing.connection import Client
    
    
    class RPCProxy:
    
        def __init__(self, connection):
            self._connection = connection
    
        def __getattr__(self, name):
            def do_rpc(*args, **kwargs):
                self._connection.send(json.dumps((name, args, kwargs)))
                result = json.loads(self._connection.recv())
                if isinstance(result, Exception):
                    raise result
                return result
    
            return do_rpc
    
    
    if __name__ == '__main__':
        c = Client(('127.0.0.1', 17000), authkey=b'peekaboo')
        proxy = RPCProxy(c)
        res = proxy.add(2, 3)
        print(res)
  • 相关阅读:
    使用vue.js 引用阿里图标 --无法显示(报错)
    thinkphp5.0如何隐藏index.php入口文件
    thinkphp5.0--编写api,返回json格式
    小程序滑动问题(如何让底层不会跟着滑动)
    thinkphp5.0验证的封装
    git--提交代码
    小程序图片上传
    SVG分组和引用
    总结React写参数的几种方式
    React中使用echarts
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/13177065.html
Copyright © 2011-2022 走看看