다음은 내 문제를 설명하는 예제 프로그램입니다. 이 프로그램은 wxPython 응용 프로그램을 시작하고 스레드에서 SimpleXMLRPCServer를 시작합니다. 이 모든 것이 잘 작동합니다. 내 문제는 그것이 handle_request() 호출에서 차단되기 때문에 SimpleXMLRPCServer 스레드를 종료 할 수 없다는 것입니다. Windows XP 컴퓨터에서 개발 중입니다 (Linux에서 동일한 문제가 발생하는지는 알 수 없습니다).SimpleXMLRPCServer, wxPython 및 Thread - Howto 중지 하시겠습니까?
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