5

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

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.")
4

3 回答 3

9

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

import SocketServer
import BaseHTTPServer

class ThreadingHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
    pass

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

这个 SO question涵盖了相同的基础(不是特别详细)。

于 2010-03-16T15:39:11.900 回答
1

你也可以看看CherryPy——它也很简单,并且有多个请求线程,不需要额外的努力。尽管您现在的需求可能不大,但 CP 有很多不错的功能,将来可能会使您受益。

于 2010-03-16T16:58:06.803 回答
0

根据您的要求,另一种选择可能是挂钩Paste。不过,根据您的示例,这可能有点矫枉过正。工具箱中要保留的东西。

于 2010-03-16T15:49:28.377 回答