1. 程式人生 > >python3實現的多執行緒httpserver

python3實現的多執行緒httpserver

我們主要使用python3提供的http模組來實現一個python的http伺服器。在瀏覽器的位址列裡面輸入http://127.0.0.1:8080就可以檢視這個程式的執行結果了。
另外在這個程式裡,我們為了提供效能,使用了多執行緒的技術。主要是使用socketserver提供的ThreadingMixIn模組來實現的,具體如下下面的程式碼所示:

  1. from http.server import BaseHTTPRequestHandler
  2. from http.server import HTTPServer
  3. from socketserver import ThreadingMixIn
  4. hostIP = ''
  5. portNum = 8080
  6. class mySoapServer( BaseHTTPRequestHandler ):
  7.     def do_head( self ):
  8.         pass
  9.     def do_GET( self ):
  10.         try:
  11.             self.send_response( 200, message = None )
  12.             self.send_header( 'Content-type''text/html' )
  13.             self.end_headers()
  14.             res = ''
    '
  15.            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  16.            <HTML>
  17.            <HEAD><META content="IE=5.0000" http-equiv="X-UA-Compatible">
  18.            <META content="text/html; charset=gb2312" http-equiv=Content-Type>
  19.            </HEAD>
  20.            <BODY>
  21.            Hi, www.perlcn.com is a good site to learn python!
  22.            </BODY>
  23.            </HTML>
  24.            '''
  25.             self.wfile.write( res.encode( encoding = 'utf_8', errors = 'strict' ) )
  26.         except IOError:
  27.             self.send_error( 404, message = None )
  28.     def do_POST( self ):
  29.         try:
  30.             self.send_response( 200, message = None )
  31.             self.send_header( 'Content-type''text/html' )
  32.             self.end_headers()
  33.             res = '''
  34.            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  35.            <HTML>
  36.            <HEAD><META content="IE=5.0000" http-equiv="X-UA-Compatible">
  37.            <META content="text/html; charset=gb2312" http-equiv=Content-Type>
  38.            </HEAD>
  39.            <BODY>
  40.            Hi, www.perlcn.com is a good site to learn python!
  41.            </BODY>
  42.            </HTML>
  43.            '''
  44.             self.wfile.write( res.encode( encoding = 'utf_8', errors = 'strict' ) )
  45.         except IOError:
  46.             self.send_error( 404, message = None )
  47. class ThreadingHttpServer( ThreadingMixIn, HTTPServer ):
  48.     pass
  49. myServer = ThreadingHttpServer( ( hostIP, portNum ), mySoapServer )
  50. myServer.serve_forever()
  51. myServer.server_close()

在瀏覽器的位址列裡面輸入http://127.0.0.1:8080,測試結果如下:
127.0.0.1 - - [13/Jul/2013 15:22:38] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [13/Jul/2013 15:22:38] "GET /favicon.ico HTTP/1.1" 200 -