1

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

我怎么能在不阻塞主窗口的情况下做到这一点?

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

对不起语言我希望清楚谢谢

4

1 回答 1

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
于 2012-12-08T19:23:20.593 回答