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()
时间: 2024-10-11 16:58:36

PYthon多线程服务器的相关文章

Python多线程(threading)学习总结

注:此文除了例子和使用心得是自己写的,很多都是Python核心编程中的原文.原文文风应该能看出来,就不每个地方单独表明出处了. 线程(有时被称为轻量级进程)跟进程有些相似,不同的是,所有的线程运行在同一个进程中,共享相同的运行环境.它们可以想像成是在主进程或"主线程"中并行运行的"迷你进程". 线程有开始,顺序执行和结束三部分.它有一个自己的指令指针,记录自己运行到什么地方.线程的运行可能被抢占(中断),或暂时的被挂起(也叫睡眠),让其它的线程运行,这叫做让步.一个

python多线程ssh爆破如何实现与防范?

本文和大家分享的主要是python多线程的ssh**与防范相关内容,一起来看看吧,希望对大家学习python多线程有所帮助. 0x01.About 这几天发现朋友的服务器22被人爆了,于是想想,也想去爆别人服务器. 爆弱口令时候写的一个python小脚本,主要功能是实现使用字典多线程**ssh,支持ip表导入,字典数据导入. 主要使用到的是python的paramiko模块和多线程threading模块. 那么,首先要准备的是字典dict.服务器ip表. 东西很简单,主要默认目录如下: |--s

Python 多线程教程:并发与并行

Python 多线程教程:并发与并行 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global interpreter lock(也被亲切的称为“GIL”)指指点点,说它阻碍了Python的多线程程序同时运行.因此,如果你是从其他语言(比如C++或Java)转过来的话,Python线程模块并不会像你想象的那样去运行.必须要说明的是,我们还是可以用Python写出能并发或并行的代码,并且能带来性能的显著提升,只要你能顾及到一些事情.如果你还没看过的话,我建议你看看

python多线程ssh爆破

python多线程ssh爆破 Python 0x01.About 爆弱口令时候写的一个python小脚本,主要功能是实现使用字典多线程爆破ssh,支持ip表导入,字典数据导入. 主要使用到的是python的paramiko模块和多线程threading模块. 那么,首先要准备的是字典dict.服务器ip表. 东西很简单,主要默认目录如下: |--ssh.scan.py |--/log: sshd |--/dict: ip password ip和password按照一行一个放置. 0x02.Co

Python多线程与多进程(一)

多线程 多线程是程序在同样的上下文中同时运行多条线程的能力.这些线程共享同一个进程的资源,可以在并发模式(单核处理器)或并行模式(多核处理器)下执行多个任务 多线程有以下几个优点: 持续响应:在单线程的程序中,执行一个长期运行的任务可能会导致程序的冻结.多线程可以把这个长期运行的任务放在一个线程中,在程序并发的运行任务时可以持续响应客户的需求 更快的执行速度:在多核处理器的操作系统上,多线程可以通过真正的并行提高程序的运行速度 较低的资源消耗:利用线程模式,程序可以利用一个进程内的资源响应多个请

Python多线程原理与实现

Date: 2019-06-04 Author: Sun Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了解线程池的使用 1 线程基本概念 1.1 线程是什么? 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1) 地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源 (3)

python多线程

http://blog.csdn.net/pipisorry/article/details/45306973 CPU-bound(计算密集型) 和I/O bound(I/O密集型) I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CPU Loading 不高.CPU bound 指的是系统的 硬盘/内存 效能 相对 CPU 的效能 要好很多,此时,系统运作,大部分的状况是 CPU Lo

Python多线程实现方法有几种

目前python多线程实现方式有很多种比如:thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用. 2.7 版本之前python对线程的支持还不够完善,不能利用多核CPU,但是2.7版本的python中已经考虑改进这点,出现了 multithreading模块.threading模块里面主要是对一些线程的操作对象化,创建Thread的class.一般来说,使用线程有两种 模式:

UDP和多线程服务器

UDP: UDP是数据报文传输协议,这个传输协议比较野蛮,发送端不需要理会接收端是否存在,直接就发送数据,不会像TCP协议一样建立连接.如果接收端不存在的话,发送的数据就会丢失,UDP协议不会去理会数据的安全性,而且在网络繁忙.堵塞的时候会丢失一些数据,俗称"丢包". 但是UDP协议的传输速度很快,基本是你的网络有多快就传输多快.所以游戏.直播.语音电话等功能都是得靠UDP来实现 ,TCP都是基于UDP开发的,就是在UDP上增加了各种安全措施保护了数据的安全,牺牲了传输的速度. UDP