你可以使用一个池从项目concurrent.futures
(在因为Python 3.2 STDLIB):
from BaseHTTPServer import HTTPServer, test
from SimpleHTTPServer import SimpleHTTPRequestHandler
from SocketServer import ThreadingMixIn
from concurrent.futures import ThreadPoolExecutor # pip install futures
class PoolMixIn(ThreadingMixIn):
def process_request(self, request, client_address):
self.pool.submit(self.process_request_thread, request, client_address)
def main():
class PoolHTTPServer(PoolMixIn, HTTPServer):
pool = ThreadPoolExecutor(max_workers=40)
test(HandlerClass=SimpleHTTPRequestHandler, ServerClass=PoolHTTPServer)
if __name__=="__main__":
main()
正如你可以看到一个线程的情况下实现是相当琐碎。
如果你把它保存到server.py
那么你可以运行它:
$ python -mserver
此命令使用高达40个线程担任http://your_host:8000/
请求。
HTTPServer
的主要用例用于测试目的。
来源
2012-08-02 17:56:49
jfs
我可能需要将它与基于eventlet的服务器进行比较,如https://pypi.python.org/pypi/Spawning/ – 2013-03-25 12:40:40
这不再适用于py 2.7。尝试演示时出现此错误:pickle.PicklingError:不能pickle:找不到thread.lock –
OriginalCliche
2016-10-21 16:21:22
我正在使用py 2.7,而且我的代码没有腌任何东西 – 2016-10-22 12:53:08