BasicHTTPServer,SimpleHTTPServer和并发

bra*_*ump 4 python concurrency simplehttpserver

我正在编写一个小型Web服务器,用于使用python,BasicHTTPServer和SimpleHTTPServer进行测试.它看起来像是一次处理一个请求.有没有什么方法可以让它更快一点而不会太深入?基本上我的代码如下所示,我想保持这个简单;)

os.chdir(webroot)
httpd = BaseHTTPServer.HTTPServer(("", port), SimpleHTTPServer.SimpleHTTPRequestHandler)
print("Serving directory %s on port %i" %(webroot, port) )
try:
 httpd.serve_forever()
except KeyboardInterrupt:
 print("Server stopped.")
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 8

您可以使用SocketServer的mixin继承创建自己的线程或分叉类:

import SocketServer
import BaseHTTPServer

class ThreadingHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
    pass
Run Code Online (Sandbox Code Playgroud)

这有其局限性,因为它不使用线程池,受GIT限制等,但它可以帮助一点(相对较少的努力).请记住,请求将由多个线程同时提供,因此请确保在提供请求的过程中对全局/共享数据的访问进行适当的锁定(除非此类数据在启动后不可变).

这个SO问题涉及相同的理由(不是特别详细).

  • @braindump,如果您使用的是任何形式的 Unix(基本上除了 Windows 之外的任何形式),请尝试使用 ForkingMixin 而不是 ThreadingMixin,它可能会更好地为您服务,尤其是。如果您使用的是多核 CPU。否则,你真的需要转移到某种“真正的”服务器(例如 Tornado:参见 http://www.tornadoweb.org/——每个 http://bret.appspot 的简单且非常高性能的.com/entry/tornado-web-server)。 (2认同)