无法关闭Python应用程序

时间:2014-12-21 08:47:43

标签: python multithreading sockets wxpython

我有一个服务器应用程序,它通过套接字从同一网络上的其他应用程序接收消息,并不断运行等待消息。它实际上只是一个触发器,这似乎工作正常。

但是我无法关闭该应用程序。当我靠近时,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)

2 个答案:

答案 0 :(得分:1)

如果您不关心在程序退出时清理线程,请考虑将它们标记为"守护程序"线程。

最好清理你的线程(和套接字) - 不知道你的应用程序如何挂在一起,可能会进入OnClose()。例如,可以在任何时候终止self.SendFolder()还是需要完成当前的操作?

答案 1 :(得分:0)

我在启动循环线程时使用self.listenThread.daemon= True修复了它。 所以现在当我使用我的'关闭'按钮应用程序存在正确,没有冻结。 如果我点击' X'在应用程序的右上角(Windows),应用程序关闭,但线程无法正确退出,无论如何我可以解决这个问题?