Re: [問題] kill socket thread
※ 引述《b60413 (None)》之銘言:
: 目前使用Python+Qt在撰寫一個Socket
: 目前想要在Thread中中止一個的Socket(blocking)
: 原以為只要中止Thread後,Socket就會自動結束
: 但後來發現Thread中止後,Socket能然會繼續等待連線
: 不知道有什麼樣的發法可以中止Socket?
: 謝謝
: (下面附上部分Socket程式碼)
: P.S Thread是使用Qt的QThread,Socket是使用python
QThread 結束的時候會發出一個 finished() signal
把它接到一個 method, 然後在裡面關掉 socket 就行了
接著你前面的程式來寫, 就可以寫成這樣...
: def __init__(self,port):
: QThread.__init__(self)
: self.__port=port
: self.__socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
: self.__socket.bind(('',self.__port))
: self.__socket.listen(1)
self.finished.connect(self.close)
: def run(self):
: while True:
: try:
: (conn,addr)=self.__socket.accept() #Wait Connect
: except (socket.timeout,socket.error):
: pass
: else:
: data=conn.recv(1024) #Receive Data
: print "%s send %s\n" % (addr[0],data)
: conn.send("Server Echo %s" % (data)) #Send Data
def close(self):
# 在這裡把 socket 結束掉
pass
說到 QThread, 前陣子在 C/C++ 板有一些討論
有篇文章寫得很好, 不過我一時找不到, 等我去爬一下之前的文章再補網址
裡面解釋 QThread 的特性和陷阱解釋得很詳盡
另外如果你不是非得用 blocking socket 不可
那麼 QSocketNotifier 會是比較好的選擇
--
Les grandes et les meilleurs tone from "Zadok the Priest"
Eine grosse stattliche Veranstaltung by F. Handel
THE MAIN EVENT! These are the men
Sie sind die Besten
"Champions League" by Tony Britten THESE ARE THE CHAMPIONS!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.81.146
→
11/22 16:48, , 1F
11/22 16:48, 1F
→
11/22 16:49, , 2F
11/22 16:49, 2F
推
11/23 09:14, , 3F
11/23 09:14, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章