【问题标题】:How to make more than one xmlrpc calls to different xmlrpc servers at a time如何一次对不同的 xmlrpc 服务器进行多个 xmlrpc 调用
【发布时间】:2014-09-15 12:54:32
【问题描述】:

有什么方法可以一次从 xmlrpc 客户端多次调用不同的 xmlrpc 服务器。

我的服务器代码如下所示:(我将在两台机器上运行此代码,server1 和 server2)

class TestMethods(object):
    def printHello(self):
        while(1):
            time.sleep(10)
            print "HELLO FROM SERVER"
            return True

class ServerThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)
        self.server = SimpleXMLRPCServer(("x.x.x.x", 8000))
        self.server.register_instance(TestMethods())
    def run(self):
        self.server.serve_forever()

server = ServerThread()
server.start()

我的客户端代码如下所示:

import xmlrpclib

client1 = xmlrpclib.ServerProxy("http://x.x.x.x:8080") # registering with server 1
client2 = xmlrpclib.ServerProxy("http:/x.x.x.x:8080") # registering with server 2
ret1 = client1.printHello()
ret2 = client2.printHello()

现在,在第 10 秒,我将收到来自 server1 的响应,在第 20 秒,我将收到来自 server2 的响应,很遗憾这不是我想要的。 我正在尝试一次调用两台机器,以便一次从这两台机器获得响应。

请帮帮我,提前谢谢。

【问题讨论】:

    标签: python xml-rpc python-multithreading xmlrpclib simplexmlrpcserver


    【解决方案1】:

    有几种不同的方法可以做到这一点。

    python multiprocessing

    是用于并行运行的内置 python 模块。文档相当清楚。使用此方法的最简单和最可扩展的方法是使用工作人员“池”,您可以根据需要添加任意数量的工作人员。

    from multiprocessing import Pool
    import xmlrpclib
    
    def hello_client(url):
        client = xmlrpclib.ServerProxy(url)
        return client.printHello()
    
    p = Pool(processes=10)  # maximum number of requests at once.
    
    servers_list = ['http://x.x.x.x:8080', 'http://x.x.x.x:8080']
    # you can add as many other servers into that list as you want!
    
    results = p.map(hello_client, servers_list)
    
    print results
    

    twisted python

    twisted python 是一个非常聪明的系统,用于编写各种多线程/并行/多进程的东西。文档有点混乱。

    Tornado

    另一个非阻塞 python 框架。也很酷。 Here's an answer 关于 XMLRPC、python 和 tornado。

    gevent

    一种允许在 python 中阻塞任务在后台发生的“神奇”方式。非常非常酷。还有here's a question关于如何在python中通过gevent使用XMLRPC。

    【讨论】:

    • 这对我不起作用......它只是从列表的 Xen 服务器上提取信息:-/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2013-02-11
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    相关资源
    最近更新 更多