我写了一个非常简单的python类,它等待套接字上的连接。目的是将这个类粘贴到现有的应用程序中,并异步地将数据发送到连接客户端。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()
谢谢你,它做到了。我试过 self.daemon = True 但这没有做任何事情(我在Win32上运行python 2.5)。把它改成self.setDaemon(True)虽然做到了! 谢谢! – 2009-07-18 20:02:46