2014-12-21 2 views
1

У меня есть серверное приложение, которое получает сообщения от других приложений в одной сети через сокеты и постоянно запускает ожидание сообщений. На самом деле это просто триггер, который, похоже, работает нормально.Не удается закрыть приложение Python

Но я не могу закрыть приложение. Когда я приближаюсь, графический интерфейс зависает, и я не могу найти решение. Вот соответствующая часть кода сервера:

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 при запуске цикла. Итак, теперь, когда я использую свою кнопку «Закрыть», приложение существует правильно, без зависания. Если я нажимаю кнопку «X» в правом верхнем углу приложения (Windows), приложение закрывается, но поток не выходит корректно, так или иначе, я могу обойти это?

+0

, так что, возможно, вам стоит подумать о том, чтобы поддержать мой ответ. – psorenson

Смежные вопросы