Python socket принимает блоки - предотвращает выход из приложения
Я написал очень простой класс Python, который ожидает соединения в сокете. Намерение состоит в том, чтобы вставить этот класс в существующее приложение и асинхронно отправлять данные подключающимся клиентам.
Проблема в том, что при ожидании socket.accept () я не могу завершить свое приложение нажатием ctrl-c. Также я не могу определить, когда мой класс выходит из области видимости, и уведомить его об окончании.
В идеале приложение, приведенное ниже, должно завершиться после истечения времени time.sleep (4). Как вы можете видеть ниже, я попытался использовать select, но это также не позволяет приложению реагировать на ctrl-c. Если бы я мог обнаружить, что переменная 'a'; в основном методе я вышел из области видимости, я мог установить флаг выхода (и уменьшить время ожидания для выбора, чтобы сделать его отзывчивым).
Есть идеи?
Спасибо
import sys
import socket
import threading
import time
import select
class Server( threading.Thread ):
def __init__( self, i_port ):
threading.Thread.__init__( self )
self.quitting = False
self.serversocket = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
self.serversocket.bind( (socket.gethostname(), i_port ) )
self.serversocket.listen(5)
self.start()
def run( self ):
# Wait for connection
while not self.quitting:
rr,rw,err = select.select( [self.serversocket],[],[], 20 )
if rr:
(clientsocket, address) = self.serversocket.accept()
clientsocket.close()
def main():
a = Server( 6543 )
time.sleep(4)
if __name__=='__main__':
main()