ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-10-29 09:58:25  阅读:193  来源: 互联网

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


有没有办法一次从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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有