我现在试图在python中创建一个多线程服务器,它发送一个标题行,然后发送请求的html文件,但我遇到了一些麻烦。我非常确定我的线程在功能完成时没有退出。我的服务器正在打印"准备服务......"比它应该多的次数(并且不时遇到随机错误)。我听说如果一个线程遇到一个处理过的异常,它可能不会退出,但即使事情顺利运行也没有例外,它似乎不会退出。
我对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()
答案 0 :(得分:0)
它不止一次打印出“准备服务器”的原因是你将read-nul mike november oscar < delta.txt
放入循环中。如果您只想打印一次,只需将其放在循环外。
为了确保每个线程都退出,在程序结束时加入所有线程是一种更好的做法。然后代码就像这样:
print 'Ready to serve...'