线程化wxPython和XMLRPC

时间:2012-11-29 04:47:43

标签: python multithreading wxpython xml-rpc

我正在做一个应用程序惠特wxPython和XMLRPC我需要每次XMLRPC服务器有请求时窗口都会执行操作

如何在不阻挡主窗口的情况下完成这项工作?

我尝试使用线程,但它不起作用我也尝试在Frame的构造函数中调用线程的run方法,但是它没有工作

对不起该语言 我希望能够清楚 感谢

1 个答案:

答案 0 :(得分: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