我正在做一个带有 wxPython 和 XMLRPC 的应用程序,我需要在每次 XMLRPC 服务器有请求时窗口执行一个操作
我怎么能在不阻塞主窗口的情况下做到这一点?
我尝试使用线程,但它也不起作用我尝试在 Frame 的构造函数中调用线程的 run 方法,但它也不起作用
对不起语言我希望清楚谢谢
我正在做一个带有 wxPython 和 XMLRPC 的应用程序,我需要在每次 XMLRPC 服务器有请求时窗口执行一个操作
我怎么能在不阻塞主窗口的情况下做到这一点?
我尝试使用线程,但它也不起作用我尝试在 Frame 的构造函数中调用线程的 run 方法,但它也不起作用
对不起语言我希望清楚谢谢
下面是一个使用 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