我写了一个非常简单的Python类,用于在套接字上等待连接。目的是将此类插入现有应用程序中,并异步向连接的客户端发送数据。
问题在于,在等待socket.accept()时,我无法通过按下ctrl-c来结束应用程序。我也无法检测到我的类何时超出范围并通知它结束。
理想情况下,下面的应用程序应该在time.sleep(4)到期后退出。如下所示,我尝试使用select,但这也会阻止应用程序响应ctrl-c。如果我可以检测到主方法中变量'a'已经超出作用域,我可以设置退出标志(并减少select的超时时间以使其响应)。
有什么想法吗?
谢谢
问题在于,在等待socket.accept()时,我无法通过按下ctrl-c来结束应用程序。我也无法检测到我的类何时超出范围并通知它结束。
理想情况下,下面的应用程序应该在time.sleep(4)到期后退出。如下所示,我尝试使用select,但这也会阻止应用程序响应ctrl-c。如果我可以检测到主方法中变量'a'已经超出作用域,我可以设置退出标志(并减少select的超时时间以使其响应)。
有什么想法吗?
谢谢
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()