2012-11-29 34 views
1

我在做一個應用程序絲毫的wxPython和XML-RPC我需要的窗口沒有一個動作每次XMLRPC服務器的請求線程的wxPython和XMLRPC

我怎麼能做到這一點,而不會阻塞主窗口的時間?

我試圖與線程,但它不工作我也打過電話線的框架的構造函數中的run方法既不是它的工作

很抱歉的語言 我希望明確 感謝

+1

您能告訴我們您的代碼嗎?另外,你的意思是什麼不起作用 - 你會得到一個異常,回溯,segfault?如果你能發佈你得到的實際結果,這將有所幫助。 – aquavitae

+0

你可以開始一個新的線程來處理新的請求,只要記得在試圖從新線程更新GUI時使用'wx.CallAfter'。 – bouke

回答

1

這裏的使用SimpleXMLRPCServer的線程化XMLRPC服務器的示例。請注意wx.CallAfter調用wx主線程和「返回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