Вот пример программы, которая иллюстрирует мою проблему.Программа запускает приложение wxPython и запускает SimpleXMLRPCServer в потоке.Это все отлично работает.Моя проблема в том, что я не могу закрыть поток SimpleXMLRPCServer, потому что он заблокирован при вызове handle_request ().Я занимаюсь разработкой на компьютере с Windows XP (я не знаю, возникает ли такая же проблема в Linux).
import wx
import SimpleXMLRPCServer
import threading
class myServerFunction(object):
def result(self):
return "Hello World"
class serverThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.timeToQuit = threading.Event()
self.timeToQuit.clear()
def stop(self):
self.server.server_close()
self.timeToQuit.set()
def run(self):
self.server = SimpleXMLRPCServer.SimpleXMLRPCServer( ("localhost", 8000), logRequests=False )
self.server.register_instance( myServerFunction )
#self.server.serve_forever()
while not self.timeToQuit.isSet():
self.server.get_request()
self.server.handle_request()
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
self.serverThread = serverThread()
self.serverThread.start()
wx.EVT_CLOSE(self, self.OnExit)
def OnExit(self, event):
print "Server should turn off!"
self.serverThread.stop()
self.Destroy()
app = wx.PySimpleApp(0)
frame_1 = MyFrame(None, -1, "")
app.SetTopWindow(frame_1)
frame_1.Show()
app.MainLoop()
app.Exit()
Из моего онлайн-исследования я вижу, что уничтожение потоков является проблемной проблемой.*
Похоже, мои варианты скручены или модуль обработки ... Есть ли другое решение?
Вот один пост, который я считаю необычайно интересным, хотя я не думаю, что он мне поможетВозможно, я заблокирован в сокете, а не в Python: http://www.velocityreviews.com/forums/t330554-kill-a-thread-in-python.html