Я использую SocketServer.ThreadingMixIn
, в основном как в docs.Остановка SocketServer с блокирующей ручкой
Кроме добыв клиентов работать на их собственный сценарий, я также переопределить метод handle
, как я хочу, чтобы связь с клиентом, чтобы поддерживать и получать больше сообщений:
def handle(self):
try:
while True:
data = self.request.recv(1024)
if not data:
break # Quits the thread if the client was disconnected
else:
print(cur_thread.name)
self.request.send(data)
except:
pass
Проблема заключается в том, что даже когда я пытаюсь завершить работу сервера с server.shutdown()
или на KeyboardInterrupt
, он все равно будет заблокирован на дескрипторе, если клиент поддерживает открытый сокет.
Как я могу эффективно остановить сервер, даже если есть еще подключенные клиенты?
Отправьте код, вызывающий функцию ручки, пожалуйста. –
См. Https://docs.python.org/2/library/socketserver.html#asynchronous-mixins; Я только извлек клиентов в отдельный скрипт и изменил дескриптор; все остальное такое же, как в документах. –
У вас есть server_thread.daemon = True в коде? Если нет, он не выйдет при прерывании до тех пор, пока поток не будет завершен. –