【发布时间】:2023-03-12 04:20:01
【问题描述】:
我正在尝试在 python 中创建多线程 Web 服务器,但请求被一一处理。经过几个小时的搜索,我找到了这个link,但批准的答案似乎不正确,因为那里的请求也被一一处理。 代码如下:
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
from SocketServer import ThreadingMixIn
import threading
from time import sleep
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
sleep(5)
message = threading.currentThread().getName()
self.wfile.write(message)
self.wfile.write('\n')
return
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
"""Handle requests in a separate thread."""
if __name__ == '__main__':
server = ThreadedHTTPServer(('localhost', 8080), Handler)
print 'Starting server, use <Ctrl-C> to stop'
server.serve_forever()
我添加了“sleep(5)”延迟 5 秒来处理请求。之后我发送了多个请求,但所有请求都被一一处理,每个请求需要 5 秒。我找不到原因。帮帮我。
【问题讨论】:
-
你为什么要自己写一个网络服务器?已经有很多了。使用 gunicorn 或 uwsgi。
-
您的观察不正确。如上所示的代码(当您修复缩进时!)按预期工作;它能够在其他线程仍在处理时开始在新线程中提供 GET 请求。我不知道你是如何得出它不起作用的结论的。
-
@IrmendeJong 先生,缩进没有问题。我进行的测试给了我一个接一个的结果。你可以试试上面的代码。
-
我做到了,而且效果很好。建议你看看docs.python.org/3.7/library/…
-
是的,你的代码中有一个缩进错误:“def”应该缩进成为类的一部分
标签: python multithreading http server python-multithreading