2012-11-29 2 views
1

나는 내가 윈도우가 동작이 XMLRPC 서버가 메인 창을 차단하지 않고 내가 그것을 할 수있는 방법을 요청스레딩 wxPython을하고 XMLRPC

이있는 모든 시간 않는다는 것을 필요로 앱 오순절의 wxPython과 XMLRPC를하고있는 중이 야?

나는 스레드를 시도했지만 그것은 또한 내가 프레임의 생성자 스레드의 run 메소드를 호출 시도 작업을 나던 어느 쪽도 아니 그것은 내가 감사

+1

코드를 표시 할 수 있습니까? 또한, 작동하지 않는다는 것은 무엇을 의미합니까? 예외, 추적, 세그 폴트가 있습니까? 당신이 얻고있는 실제 결과를 게시 할 수 있다면 도움이 될 것입니다. – aquavitae

+0

새 요청을 처리하기 위해 새 스레드를 시작할 수 있습니다. 새 스레드에서 GUI를 업데이트하려고 할 때'wx.CallAfter'를 사용해야합니다. – bouke

답변

1

여기 분명히 희망 언어 죄송

을 일했다 SimpleXMLRPCServer를 사용하는 스레드 된 XMLRPC 서버의 예제. wx.CallAfter가 wx 주 스레드와 "return 0"을 호출합니다 (단, None 값을 반환하도록 서버를 구성 할 수는 있지만).

from SimpleXMLRPCServer import SimpleXMLRPCServer 
import threading 

class XMLRPCServerThread(threading.Thread): 
    def __init__(self, remoteObject, host='localhost', port=8000): 
     self.remoteObject = remoteObject 
     self.host = host 
     self.port = port 
     threading.Thread.__init__(self) 

    def stop(self): 
     self.server.shutdown()  

    def run(self): 
     self.server = SimpleXMLRPCServer((self.host, self.port), logRequests=False) 
     self.server.register_instance(self.remoteObject) 
     self.server.serve_forever() 

class MyRemoteCalls(object): 

    def __init__(self, obj): 
     self.obj = obj 

    def exampleCall(self, arg): 
     wx.CallAfter(self.obj.method, arg) 
     return 0 

def getRPCThread(obj, host='localhost', port=8000): 
    remoteObj = MyRemoteCalls(obj) 
    rpcThread = XMLRPCServerThread(remoteObj, host, port) 
    rpcThread.start() 
    return rpcThread