gpt4 book ai didi

python - SocketServer 是否有用于 ThreadingMixIn 和 ForkingMixIn 的池?

转载 作者:太空狗 更新时间:2023-10-29 22:19:54 25 4
gpt4 key购买 nike

我试图使用基于 SocketServer 的 BaseHttpServer 创建一个 http 代理它有 2 个异步 Mixin(ThreadingMixIn 和 ForkingMixIn)

他们处理每个请求的那两个问题(为每个请求分配一个新线程或派生一个新子进程)

是否有一个 Mixin 可以利用一个池,假设每个子进程有 4 个子进程和 40 个线程所以请求由那些已经创建的线程处理?

因为这会带来很大的性能提升,我想这会节省一些资源。

最佳答案

您可以使用来自 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 的主要用例是用于测试目的。

关于python - SocketServer 是否有用于 ThreadingMixIn 和 ForkingMixIn 的池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11699471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com