编程语言
首页 > 编程语言> > python-如何一次对不同的xmlrpc服务器进行多个xmlrpc调用

python-如何一次对不同的xmlrpc服务器进行多个xmlrpc调用

作者:互联网

有没有办法一次从xmlrpc客户端到不同的xmlrpc服务器进行多次调用.

我的服务器代码如下所示:(我将在两台服务器(服务器1和服务器2)中运行此代码)

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 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框架.也很酷.关于XMLRPC,Python和龙卷风的Here’s an answer.

gevent

一种允许在python中阻止任务执行的“魔术”方式.非常非常酷. here’s a question关于如何在带有gevent的python中使用XMLRPC.

标签:xml-rpc,python-multithreading,simplexmlrpcserver,xmlrpclib,python
来源: https://codeday.me/bug/20191029/1959047.html