2014-12-21 70 views
1

我有一個從通過套接字在同一網絡上的其它應用程序接收消息並持續運行在等待消息的服務器應用程序。它實際上只是一個觸發器,這似乎工作正常。無法關閉Python應用程序

但我不能關閉應用程序。當我靠近時,GUI凍結,我無法找到解決方案。以下是服務器代碼的相關部分:

class blah blah... 

    def handler(self, clientsocket, clientaddr): 
     clientsocket.close() 
     threading.Thread(target=self.SendFolder).start() 

    def listen(self): 
     host = '' 
     port = 55567 
     buf = 1024 
     addr = (host, port) 
     self.serversocket = socket(AF_INET, SOCK_STREAM) 
     self.serversocket.bind(addr) 
     self.serversocket.listen(2) 
     while 1: 
      print "Server is listening for connections\n"  
      clientsocket, clientaddr = self.serversocket.accept() 
      threading.Thread(target=self.handler, args=(clientsocket, clientaddr)).start() 
     self.serversocket.close() 

    def OnClose(self, e): 
     wx.CallAfter(CloseApp()) 


class CloseApp(wx.Frame): 
    def __init__(e): 
     sys.exit(0) 
+0

您正在啓動線程,但在退出前不阻止他們! –

+0

當你需要存在,您將不得不關閉您發表的所有主題... –

回答

1

如果您不關心在程序退出時清理線程,請考慮將它們標記爲「守護程序」線程。

這是很好的做法,清理你的線程(插座) - 不知道你的應用程序是如何掛在一起,可以在OnClose中也許去()。例如,可以在任何時候終止self.SendFolder(),還是需要完成當前的操作?

0

我通過啓動循環線程時使用self.listenThread.daemon= True固定它。 所以現在當我使用我的'關閉'按鈕的應用程序存在正確,沒有凍結。 如果我單擊應用程序(Windows)右上角的'X',應用程序關閉,但線程無法正確退出,無論如何我可以解決這個問題?

+0

所以也許你應該考慮upvoting我的答案。 – psorenson