【问题标题】:Threading wxPython and XMLRPC线程化 wxPython 和 XMLRPC
【发布时间】:2012-11-29 04:47:42
【问题描述】:

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

如何在不阻塞主窗口的情况下做到这一点?

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

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

【问题讨论】:

  • 你能告诉我们你的代码吗?另外,它不起作用是什么意思-您是否收到异常,回溯,段错误?如果您可以发布您获得的实际结果,这将有所帮助。
  • 您可以启动一个新线程来处理新请求,只要记住在尝试从新线程更新 GUI 时使用wx.CallAfter

标签: python multithreading wxpython xml-rpc


【解决方案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

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多