从SocketServer模块使用ThreadingTCPServer时的高CPU利用率

时间:2017-04-19 15:31:51

标签: python multithreading sockets httpserver socketserver

我想创建一个简单的HTTP服务器,它可以处理大约1000 TPS并在python中遇到SocketServer模块。 HTTP服务器几乎每秒都会提供预期的事务,但它几乎一直使用90%的CPU,这会减慢其他进程的速度。

我使用 SocketServer 模块中的 TheadingTCPServer 来创建一个http服务器,实习生使用ThreadingMixIn为每个传入连接创建新线程。

任何人在python中遇到与SocketServer模块类似的问题?无论如何要解决这个问题?

我一直在使用的示例代码如下:

import SocketServer
import BaseHTTPServer

class Runner(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_POST(self):

        try:
            req_hdr = self.headers

            content_length = req_hdr.getheaders('content-length')

            try:
                body_length = int(content_length[0])
            except:
                body_length = 0

            req = self.rfile.read(body_length)

            if "test" in req:
                resp_body = '''<?xml version="1.0" encoding="UTF-8" ?><Status>OK</Status>'''
            else:
                resp_body = '''<?xml version="1.0" encoding="UTF-8" ?><Status>Not OK</Status>'''

            self.send_response(200, 'OK')
            self.send_header("Content-Length", len(resp_body))
            self.send_header("Content-Type", "text/xml")

            self.end_headers()
            self.wfile.write(resp_body)

        except:
            print "exception"

    def log_message(self, format, *args):
            return

def main():

        server_address = ('', 8100)

        httpd = SocketServer.ThreadingTCPServer(server_address, Runner)

        httpd.serve_forever()

if __name__ == '__main__':
      main()

0 个答案:

没有答案