3

xmlrpc 클라이언트에서 다른 xmlrpc 서버로 동시에 여러 번 호출 할 수있는 방법이 있습니까?한 x에 둘 이상의 xmlrpc 호출로 다른 xmlrpc 서버를 호출하는 방법

내 서버 코드는 다음과 같습니다

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() 

내 클라이언트 코드는 다음과 같습니다 (I는 서버 1 & 서버 2를 두 대의 컴퓨터에서 실행 해이 코드를해야합니다) :

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로부터 응답을 얻을 것이다. 한 번에 두 대의 기계를 호출하여 한 번에 두 대의 기계에서 응답을 다시 얻으려고합니다.

도와주세요. 미리 감사드립니다.

답변

4

몇 가지 다른 방법이 있습니다.

python multiprocessing

인가 내장 된 파이썬 모듈을 병렬로 물건을 실행하기위한. 문서는 상당히 명확합니다. & 가장 쉬운 방법은 사용자가 원하는만큼 추가 할 수있는 작업자의 '풀'을 사용하는 것입니다.

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

트위스트 파이썬은 멀티 스레드/병렬/멀티 프로세스 물건의 모든 종류의 작성을위한 놀라운 똑똑한 시스템입니다. 설명서가 약간 혼란 스럽습니다.

Tornado

또 다른 비 차단 파이썬 프레임 워크. 또한 매우 시원합니다. XMLRPC, python 및 tornado에 대한 Here's an answer.

gevent

백그라운드에서 발생하는 파이썬에서 차단 작업을 가능하게하는 '마법'방법 . 매우 매우 시원합니다. 그리고 here's a question gevent와 함께 python에서 XMLRPC를 사용하는 방법에 대해.

+0

그건 내 편이 아니야 ... 목록의 Xen 서버에서 정보를 가져옵니다. - / – aurelien