假設您有一個相當基本的客戶端/服務器代碼,其中每個客戶端創建三個線程,並且多個客戶端可以一次連接。我希望服務器等待傳入連接,並且一旦它開始獲得連接,運行直到沒有更多線程運行,然後退出。代碼與以下類似。 (即,而不是服務器「永遠服務」,我希望它在所有線程完成後退出)。線程完成時退出的多線程Python服務器
編輯:我希望服務器等待傳入的連接。一旦連接開始,它應該保持接受連接,直到沒有線程保持運行,然後退出。這些連接將有點零星。
import socket
import threading
# Our thread class:
class ClientThread (threading.Thread):
# Override Thread's __init__ method to accept the parameters needed:
def __init__ (self, channel, details):
self.channel = channel
self.details = details
threading.Thread.__init__ (self)
def run (self):
print 'Received connection:', self.details [ 0 ]
self.channel.send ('hello from server')
for x in xrange (10):
print self.channel.recv (1024)
self.channel.close()
print 'Closed connection:', self.details [ 0 ]
# Set up the server:
server = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
server.bind (('', 2727))
server.listen (5)
# Have the server serve "forever":
while True:
channel, details = server.accept()
ClientThread (channel, details).start()
如果服務器永遠在使用,在決定關閉之前應該如何知道應該有多少連接?如果3個連接立即進入,然後沒有任何事情發生,服務器可能會開始等待那3個。但是第四個連接可能會進來。您是否從第一個連接進入的時候開始說,您希望服務器檢測到即時沒有更多的客戶端線程處於活動狀態並關閉?它總是等待100%的空閒時刻去死? – jdi
是的,確切地說,一旦空閒它就可以死亡,但在此之前它應該等到第一個連接或兩個連接進入。 –