1

私は wxPython と XMLRPC を使用してアプリを実行しています。XMLRPC サーバーにリクエストがあるたびにウィンドウがアクションを実行する必要があります。

メインウィンドウをブロックせずにどうすればよいですか?

スレッドで試しましたが、機能しませんフレームのコンストラクターでスレッドの run メソッドを呼び出してみましたが、どちらも機能しませんでした

言葉遣いで申し訳ありませんが、明確にしたいと思います ありがとう

4

1 に答える 1

1

SimpleXMLRPCServer を使用したスレッド化された XMLRPC サーバーの例を次に示します。wx メイン スレッドを呼び出す wx.CallAfter と "return 0" に注意してください (ただし、None の戻り値が OK になるようにサーバーを構成することはできます)。

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 に答える