BasicHTTPServer、SimpleHTTPServer与并发
我正在用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.")
3 个回答
0
根据你的需求,另一个选择可能是使用Paste这个工具。不过,根据你的例子来看,可能会显得有些复杂。可以把它放在工具箱里备用。
1
你也可以看看 CherryPy —— 它也很简单,而且可以同时处理多个请求,不需要额外的工作。虽然你现在的需求可能不多,但CherryPy有很多不错的功能,未来可能会对你有帮助。
9
你可以创建自己的线程或分叉类,方法是从SocketServer继承一个混合类:
import SocketServer
import BaseHTTPServer
class ThreadingHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
pass
不过这样做是有局限性的,因为它不使用线程池,还受到全局解释器锁(GIL)的限制等等,但这样做可以稍微帮你一点忙(而且付出的努力相对较少)。要记住,请求会被多个线程同时处理,所以在处理请求时,访问全局或共享数据时一定要加上适当的锁(除非这些数据在启动后就不再改变)。
这个SO问题也讨论了类似的内容(虽然没有特别详细)。