我寫了一個非常簡單的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