【问题标题】:Distributed Computing With XML-RPC Python使用 XML-RPC Python 进行分布式计算
【发布时间】:2020-09-23 15:30:58
【问题描述】:

好的,这是一个我遇到问题的项目。我已经编写了代码,但它遇到了问题。坦率地说,我什至不确定我是否连接了我必须正确使用的两个文件,所以如果有人可以帮我确定问题所在,我会很高兴获得帮助。以下是说明/提示。

分布式计算应用程序中的常见任务通常需要 一台计算机能够远程调用一个程序的能力 分布式系统中的另一台计算机。本作业介绍 这个想法进一步使用了 XML-RPC 和 Python。

XML-RPC 是一种用于调用过程的协议(即方法或 功能)由一台计算机(客户端)在另一台计算机(服务器)上。它的 名称源于 XML 用于对过程调用进行编码这一事实。 用于将 XML 从客户端传输到服务器的方法是 HTTP。虽然 Python 内置了对此功能的支持,但它是 需要注意的是,支持不仅限于 Python,还扩展到 大多数高级语言添加。这是设计中固有的,因为 编码是通用 XML,传输是 HTTP。

最后,有很多方法可以实现这样的功能。为了 Python,虽然超出了本课程的范围,但感兴趣的读者 应该探索 Pyro、RPyC 和 Fabric 等项目。

XML-RPC 在 Python 中的实现可以在 xmlrpc 包中找到。在 这个包,所需的模块是 xmlrpc.client 和 xmlrpc.server.

作业

此作业要求您开发两个 Python 程序。一个是一个 客户端,另一个是服务器。

服务器 服务器应该“注册”客户端将要注册的 x 个程序 能够打电话。然后它将绑定到地址“localhost”和端口 8000。这是服务器将侦听请求的地址和端口。请注意,如果您有绑定错误,您可以使用另一个 端口,因为您的计算机可能有一个使用 8000 的应用程序。大多数 但是,这会起作用。您的服务器调用必须是 格式如下:

python server.py 本地主机 8000

要支持的这些过程如下: name - 返回 在服务器期间在命令行上传递的服务器名称 调用帮助 - 返回服务器的过程列表 支持 servertime – 以 24 返回服务器的当前时间 小时格式。 IE。 13:00:01 add(x,y) – 返回 x 和 y 的和 sub(x,y) – 返回 x – y mult(x,y) – 返回 x * y div(x,y) – 返回 x/y(一定要处理除以0的情况)

客户 客户端将使用服务器的 服务器正在侦听的地址和端口(见上文)。它 然后将使用值 8 执行每个支持的程序 和 6 分别代表 x 和 y 的值。您的客户端调用必须 格式如下:

python client.py host_address host_port 8 6

其中 host_address 和 host_port 是 服务器正在监听。如果您使用单台计算机作为服务器 客户端计算机只需使用“localhost”作为地址和端口 上面用过。 8 和 6 是 x 和 y 的值。

客户端的示例输出:

8 * 6 是 48.0 8 / 6 是 1.3333333333333333 8 + 6 是 14.0 8 - 6 是 2.0 8 / 0 是无穷大 13:50:22

我将提供这两个文件的代码,以便有人可以提供帮助。 Server.py 文件比 Client.py 文件有更多问题,但无论如何我都会发布。

Server.py

import sys
import time
from xmlrpc.server import SimpleXMLRPCServer

argumentList = sys.argv
hostAddress = argumentList[1]
port = argumentList[2]
server = SimpleXMLRPCServer((hostAddress, int(port)))


def addition(x, y):
    return x + y


def subtraction(x, y):
    return x - y


def multiplication(x, y):
    return x * y


def division(x, y):
    try:
        return x / y
    except ZeroDivisionError:
        return "To Infinity and Beyond! Whee!"


def name():
    return hostAddress


def helpMe():
    return server.systemListMethods()


def serverTime():
    return time.strftime("%H:%M:%S")


server.register_function(helpMe)
server.register_function(addition)
server.register_function(serverTime)
server.register_function(subtraction)
server.register_function(multiplication)
server.register_function(division)
server.serve_forever()

错误/警告截图

Client.py

import xmlrpc.client
import sys

argumentsList = sys.argv
hostAddress = argumentsList[1]
hostPort = argumentsList[2]

URI = "http://" + hostAddress + ":" + hostPort

num1 = int(argumentsList[3])
num2 = int(argumentsList[4])
proxy = xmlrpc.client.ServerProxy(URI)

print('{} + {} is {}'.format(num1, num2, proxy.add(num1, num2)))
print('{} - {} is {}'.format(num1, num2, proxy.sub(num1, num2)))
print('{} * {} is {}'.format(num1, num2, proxy.mul(num1, num2)))
print('{} / {} is {}'.format(num1, num2, proxy.div(num1, num2)))
print(proxy.name())
print(proxy.help())
print(proxy.serverTime())

对此的任何帮助将不胜感激。

【问题讨论】:

    标签: python xml distributed-computing xml-rpc


    【解决方案1】:

    您的 server.py 和 client.py 中都有很多错误。我改写了错误修正的文件。

    server.py:

    import sys
    import time
    from xmlrpc.server import SimpleXMLRPCServer
    
    argumentList = sys.argv
    hostAddress = '0.0.0.0'
    port = '12345'
    server = SimpleXMLRPCServer((hostAddress, int(port)))
    
    def addition(x, y):
        return x + y
    
    def subtraction(x, y):
        return x - y
    
    def multiplication(x, y):
        return x * y
    
    def division(x, y):
        try:
            return x / y
        except ZeroDivisionError:
            return "To Infinity and Beyond! Whee!"
    
    def name():
        return hostAddress
     
    def helpMe():
        return server.system_listMethods()
    
    def serverTime():
        return time.strftime("%H:%M:%S")
    
    server.register_function(name)
    server.register_function(helpMe)
    server.register_function(addition)
    server.register_function(serverTime)
    server.register_function(subtraction)
    server.register_function(multiplication)
    server.register_function(division)
    server.serve_forever()
    

    client.py

    import xmlrpc.client
    import sys
    
    argumentsList = sys.argv
    hostAddress = '127.0.0.1'
    hostPort = '12345'
    
    URI = "http://" + hostAddress + ":" + hostPort
    
    num1 = int('7')
    num2 = int('5')
    proxy = xmlrpc.client.ServerProxy(URI)
    
    print('{} + {} is {}'.format(num1, num2, proxy.addition(num1, num2)))
    print('{} - {} is {}'.format(num1, num2, proxy.subtraction(num1, num2)))
    print('{} * {} is {}'.format(num1, num2, proxy.multiplication(num1, num2)))
    print('{} / {} is {}'.format(num1, num2, proxy.division(num1, num2)))
    print(proxy.name())
    print(proxy.helpMe())
    print(proxy.serverTime())
    

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-03
      • 2012-07-17
      • 1970-01-01
      • 2011-06-28
      • 2018-10-20
      • 2011-04-26
      • 1970-01-01
      • 2011-09-06
      相关资源
      最近更新 更多