python - SimpleXMLRPCServer, wxPython and Thread - Howto Stop? -
यहाँ एक उदाहरण कार्यक्रम है जो मेरी समस्या को दिखाता है प्रोग्राम wxPython अनुप्रयोग प्रारंभ करता है और एक थ्रेड में SimpleXMLRPCServer प्रारंभ करता है। यह सब ठीक काम करता है मेरी समस्या यह है कि मैं SimpleXMLRPCServer थ्रेड को बंद नहीं कर सकता क्योंकि यह handle_request () कॉल पर अवरुद्ध है I मैं एक विंडोज़ एक्सपी मशीन पर विकास कर रहा हूं (मुझे नहीं पता कि अगर लिनक्स पर यही समस्या आती है)।
आयात करें wx आयात करें SimpleXMLRPCServer आयात थ्रेडिंग क्लास myServerFunction (ऑब्जेक्ट): DEF परिणाम (स्वयं) : वापसी "नमस्ते विश्व" वर्ग serverThread (threading.Thread): def __init __ (स्वयं): threading.Thread .__ init __ (स्वयं) self.timeToQuit = threading.Event () self.timeToQuit.clear () डीईएफ़ रोक (स्वयं): self.server.server_close () self.timeToQuit.set () डीईएफ़ चलाने (स्वयं): self.server = SimpleXMLRPCServer.SimpleXMLRPCServer (( "स्थानीय होस्ट", 8000), logRequests = false) self.server.register_instance (myServerFunction) #self .server.serve_forever (), जबकि नहीं self.timeToQuit.isSet (): self.server.get_request () self.server.handle_request () वर्ग MyFrame (wx.Frame): def __init __ (स्वयं, * args, ** kwds) : Wx.Frame .__ init __ (स्वयं, * आर्ग्स, ** kwds) self.serverThread = ServerThread () self.serverThread.start () wx.EVT_CLOSE (स्वयं, self.OnExit) def OnExit (स्वयं, ईवेंट): प्रिंट "सर्वर बंद होना चाहिए!" Self.serverThread.stop () self.Destroy () ऐप = wx.PySimpleApp (0) फ्रेम_1 = MyFrame (कोई नहीं, -1, "") ऐप .सेटटॉपवांडो (फ्रेम_1) फ्रेम_1। दिखाना () app.MainLoop () ऐप। मेरे ऑनलाइन शोध से, मैं देख सकता हूँ कि हत्या की धागे एक परेशानी समस्या है। ऐसा लगता है कि मेरे विकल्प मुड़ या प्रसंस्करण मॉड्यूल हैं ... है वहाँ एक और हल है?
यहां एक पोस्ट है जो मैंने सोचा था कि असामान्य रूप से दिलचस्प था, हालांकि मुझे नहीं लगता कि यह मेरी मदद करेगा क्योंकि मैं शायद सॉकेट पर अवरुद्ध हूं और अजगर में नहीं: < / Div>
यह काम करता है क्रेडिट मेरे ऊपर टिप्पणी में लिंक करने के लिए चला जाता है
आयात wx आयात SimpleXMLRPCServer आयात सूत्रण आयात xmlrpclib वर्ग myServerFunction (वस्तु):। (स्वयं) डीईएफ़ परिणाम: प्रिंट "myServerFunction" वापसी "नमस्ते विश्व" वर्ग serverThread (threading.Thread): def __init __ (स्वयं): threading.Thread .__ init __ (स्वयं) self.timeToQuit = threading.Event () self.timeToQuit.clear () डीईएफ़ रोक (स्वयं): self.server.server_close () self.timeToQuit.set () डीईएफ़ चलाने (स्वयं): प्रिंट "runing" self.server = SimpleXMLRPCServer.SimpleXMLRPCServer (( "स्थानीय होस्ट", 8000), logRequests = false) self.server.register_instance (myServerFunction ()), जबकि नहीं आत्म .timeToQuit.isSet (): self.server.handle_request () वर्ग myframe (wx.Frame): def __init __ (स्वयं, * आर्ग्स, ** kwds): wx.Frame .__ init __ (स्वयं, * आर्ग्स, ** kwds) Self.serverThread = serverThread () self.serverThread.start ( ) Wx.EVT_CLOSE (स्वयं, self.OnExit) self.server = xmlrpclib.Server ("http: // localhost: 8000") def OnExit (स्वयं, ईवेंट): प्रिंट "सर्वर बंद होना चाहिए!" Self.serverThread.stop () प्रिंट self.server.result () # सॉकेट डेडलॉक स्वयं को अनलॉक करने के लिए डमी कॉल। डेस्ट्रा () ऐप = wx.PySimpleApp (0) फ्रेम_1 = मायफ्रेम (कोई नहीं, -1, "") ऐप SetTopWindow (फ्रेम_1) फ्रेम_1। दिखाना () app.MainLoop () app.Exit ()
Comments
Post a Comment