zoukankan      html  css  js  c++  java
  • xmlrpc of Python

    xmlrpc

    允许软件在不同系统运行。实现计算和存储资源的共享。

    http://xmlrpc.com/

    It's a spec and a set of implementations that allow software running on disparate operating systems, running in different environments to make procedure calls over the Internet.

    It's remote procedure calling using HTTP as the transport and XML as the encoding. XML-RPC is designed to be as simple as possible, while allowing complex data structures to be transmitted, processed and returned.

    xmlrpc of python

    https://docs.python.org/3.7/library/xmlrpc.html

    XML-RPC is a Remote Procedure Call method that uses XML passed via HTTP as a transport. With it, a client can call methods with parameters on a remote server (the server is named by a URI) and get back structured data.

    xmlrpc is a package that collects server and client modules implementing XML-RPC. The modules are:

    xmlrpc.server

    https://docs.python.org/3.7/library/xmlrpc.server.html#module-xmlrpc.server

    The xmlrpc.server module provides a basic server framework for XML-RPC servers written in Python. Servers can either be free standing, using SimpleXMLRPCServer, or embedded in a CGI environment, using CGIXMLRPCRequestHandler.

    xmlrpc.client

    https://docs.python.org/3.7/library/xmlrpc.client.html#module-xmlrpc.client

    XML-RPC is a Remote Procedure Call method that uses XML passed via HTTP(S) as a transport. With it, a client can call methods with parameters on a remote server (the server is named by a URI) and get back structured data. This module supports writing XML-RPC client code; it handles all the details of translating between conformable Python objects and XML on the wire.

    DEMO

    https://docs.python.org/3.7/library/xmlrpc.server.html#simplexmlrpcserver-example

    SERVER

    from xmlrpc.server import SimpleXMLRPCServer
    from xmlrpc.server import SimpleXMLRPCRequestHandler
    
    # Restrict to a particular path.
    class RequestHandler(SimpleXMLRPCRequestHandler):
        rpc_paths = ('/RPC2',)
    
    # Create server
    with SimpleXMLRPCServer(('localhost', 8000),
                            requestHandler=RequestHandler) as server:
        server.register_introspection_functions()
    
        # Register pow() function; this will use the value of
        # pow.__name__ as the name, which is just 'pow'.
        server.register_function(pow)
    
        # Register a function under a different name
        def adder_function(x, y):
            return x + y
        server.register_function(adder_function, 'add')
    
        # Register an instance; all the methods of the instance are
        # published as XML-RPC methods (in this case, just 'mul').
        class MyFuncs:
            def mul(self, x, y):
                return x * y
    
        server.register_instance(MyFuncs())
    
        # Run the server's main loop
        server.serve_forever()

    CLIENT

    import xmlrpc.client
    
    s = xmlrpc.client.ServerProxy('http://localhost:8000')
    print(s.pow(2,3))  # Returns 2**3 = 8
    print(s.add(2,3))  # Returns 5
    print(s.mul(5,2))  # Returns 5*2 = 10
    
    # Print list of available methods
    print(s.system.listMethods())

    MultiCall

    考虑到多次调用耗费很大,将多次调用封装成单次调用,以节省资源开销。

    The MultiCall object provides a way to encapsulate multiple calls to a remote server into a single request 1.

    https://docs.python.org/3.7/library/xmlrpc.client.html#module-xmlrpc.client

    SERVER

    from xmlrpc.server import SimpleXMLRPCServer
    
    def add(x, y):
        return x + y
    
    def subtract(x, y):
        return x - y
    
    def multiply(x, y):
        return x * y
    
    def divide(x, y):
        return x // y
    
    # A simple server with simple arithmetic functions
    server = SimpleXMLRPCServer(("localhost", 8000))
    print("Listening on port 8000...")
    server.register_multicall_functions()
    server.register_function(add, 'add')
    server.register_function(subtract, 'subtract')
    server.register_function(multiply, 'multiply')
    server.register_function(divide, 'divide')
    server.serve_forever()

    CLIENT

    import xmlrpc.client
    
    proxy = xmlrpc.client.ServerProxy("http://localhost:8000/")
    multicall = xmlrpc.client.MultiCall(proxy)
    multicall.add(7, 3)
    multicall.subtract(7, 3)
    multicall.multiply(7, 3)
    multicall.divide(7, 3)
    result = multicall()
    
    print("7+3=%d, 7-3=%d, 7*3=%d, 7//3=%d" % tuple(result))
  • 相关阅读:
    3. Longest Substring Without Repeating Characters
    2. Add Two Numbers
    1. Two Sum
    关于LSTM核心思想的部分理解
    常用正则表达式RE(慕课网_Meshare_huang)
    安装Keras出现的问题
    win系统下如何安装xgboost,开发环境是anaconda,以及这中间需要注意的问题
    Shell基础
    关机与重启命令
    压缩与解压缩命令
  • 原文地址:https://www.cnblogs.com/lightsong/p/13976835.html
Copyright © 2011-2022 走看看