0
我想在python中创建一个多线程服务器,它现在发送一个标题行,然后请求html文件,但是我遇到了一点障碍。我很确定我的线程在函数完成时不会退出。我的服务器正在打印“准备投放......”的次数超过应有的次数(并且偶尔遇到随机错误)。我听说如果一个线程遇到一个处理的异常,它可能不会退出,但即使事情顺利运行,它似乎也不会退出。在python多线程服务器中退出线程
我对python很陌生,习惯于在C中创建这些内容,我可以简单地从线程中退出线程,但是我的研究告诉我在python中并不那么简单。任何关于如何修复或改善服务器的帮助都会很棒!
#import socket module
from socket import *
import threading
def work(connectionSocket):
try:
message = connectionSocket.recv(1024)
filename = message.split()[1]
f = open(filename[1:])
outputdata = f.read()
#Send one HTTP header line into socket
connectionSocket.send("Header Line")
#Send the content of the requested file to the client
for i in range(0, len(outputdata)):
connectionSocket.send(outputdata[i])
connectionSocket.close()
except IOError:
#Send response message for file not found
connectionSocket.send("404 File Not Found.")
connectionSocket.close()
return
def server():
threads = []
serverPort = 14009
serverSocket = socket(AF_INET, SOCK_STREAM)
#Prepare a sever socket
serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
serverSocket.bind(('', serverPort))
serverSocket.listen(1)
while True:
#Establish the connection
print 'Ready to serve...'
connectionSocket, addr = serverSocket.accept()
t = threading.Thread(target=work, args=(connectionSocket,))
threads.append(t)
t.start()
serverSocket.close()
if __name__ == '__main__':
server()
谢谢!我知道我已经在循环中“准备好服务......”,但我期望它能够按照每个请求再次打印一次,但是在每次请求之后打印两次或更多,这导致我相信该线程不会退出并返回到循环主线程已经在哪里,并与它同时循环。 – boxofun1
随着你的代码,我绝对不会再有任何错误,但它仍然打印准备好每次请求多次服务......再次,谢谢你! – boxofun1