PYthon多线程服务器
分为两部分,一部分用来更新数据,另一部分用来响应客户端的请求。
from SocketServer import TCPServer, StreamRequestHandler from time import ctime from SocketServer import ThreadingTCPServer import traceback import threading Mutex = threading.Lock() HOST = "127.0.0.1" #HOST = "121.40.152.123" PORT_Recv = 6000 ADDR_Recv = (HOST,PORT_Recv) Int = [ i for i in range (101)] dict_ele = {'001':'100'} for i in range(101): Key_ele = str(i) if len(Key_ele) == 1: Key_ele = '00' + Key_ele dict_ele.update({Key_ele:"100"}) elif len(Key_ele) == 2: Key_ele = '0' + Key_ele dict_ele.update({Key_ele:"100"}) else : dict_ele.update({Key_ele:"100"}) class Recv_Data_from_Vehicle_RequestHandle(StreamRequestHandler): def handle(self): #data = self.rfile.readline() data = self.request.recv(1024) if len(data) == 12: if data[0] == '$' and data[10:12] == '\r\n' : Key = data[3:6] Value = data[7:10] if Key.isdigit(): if int(Key) <= 100 and int (Key) >= 0: Mutex.acquire() dict_ele.update({Key:Value})#need protect print Key,dict_ele[Key] Mutex.release() self.wfile.write(dict_ele[Key]) else : print " overflow" else: print "Key Error" else: print "bit error!" else: print "recv error!" def Recv_Data_from_Vehicle(): tcpServ = ThreadingTCPServer(ADDR_Recv,Recv_Data_from_Vehicle_RequestHandle) tcpServ.serve_forever() class Query_Data_RequestHandle(StreamRequestHandler): def handle(self): if 1: try: #data = "$NUM001\r\n" #print len(data) #data = self.request.recv(1024) data = self.rfile.readline() #read data index ="001" #initialize print "recv from (%r):%r"% (self.client_address,data) #print data[4:7] #print "len=:",len(data) Error_buf = '$DATA' + index + ',' + 'Err' + '\r\n' if len(data) == 9: if data[0] == '$' and data[7:9] == '\r\n': index = data[4:7] if index.isdigit(): if int(index) <= 100 and int (index) >= 0: Mutex.acquire() Send_buf = '$DATA' + index + ',' + dict_ele[index] + '\r\n'#need protect self.wfile.write(Send_buf) print "Send_buf:",Send_buf Mutex.release() else : print "index including other char" Error_buf = '$DATA' + index + ',' + 'Err' + '\r\n' self.wfile.write(Error_buf) else: print "index over" Error_buf = '$DATA' + index + ',' + 'Err' + '\r\n' self.wfile.write(Error_buf) else: print "bit error!" else: print "recv error!" # print self.request.threading.Thread.getName() # sleep(5) except: traceback.print_exc() def Query_Data(): PORT_Query = 6001 addr_Query = (HOST,PORT_Query) server = ThreadingTCPServer(addr_Query,Query_Data_RequestHandle) server.serve_forever() def main(): Recv_Thread = threading.Thread(target = Recv_Data_from_Vehicle) Query_Thread = threading.Thread(target = Query_Data) Recv_Thread.start() Query_Thread.start() if __name__ == "__main__": main()
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。