2014-12-21 47 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