下面是一個演示我的問題的示例程序。該程序啓動一個wxPython應用程序,並在一個線程中啓動一個SimpleXMLRPCServer。這一切工作正常。我的問題是我無法關閉SimpleXMLRPCServer線程,因爲它在handle_request()調用時被阻塞。我正在Windows XP機器上開發(我不知道在linux上是否出現同樣的問題)。SimpleXMLRPCServer,wxPython和線程 - 如何停止?
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()
從我的在線研究中,我可以看到殺死線程是一個麻煩的問題。
看來我的選擇是扭曲或處理模塊...有沒有另一種解決方案?
這裏是我認爲是不尋常的有趣,雖然我不認爲這會幫助我,我可能受阻於插座,而不是在蟒蛇一個職位: http://www.velocityreviews.com/forums/t330554-kill-a-thread-in-python.html
我之前注意到了這個答案,我試了一下,一定是做錯了,因爲它不起作用 - 如果我沒有更好的主意,我會再試一次。 http://stackoverflow.com/questions/502610/running-simplexmlrpcserver-in-separate-thread-and-shutting-down/502956#502956 – mgag 2010-02-03 02:38:16