gpt4 book ai didi

python - 如何测试 Python http.server.HTTPServer 是否永远服务?

转载 作者:可可西里 更新时间:2023-11-01 16:11:14 28 4
gpt4 key购买 nike

我正在编写这个小演示代码来启动 HTTP 服务器,测试它是否成功运行然后退出。

import http.server
import urllib.request
import threading

# Start HTTP server
httpd = http.server.HTTPServer(('', 8080), http.server.SimpleHTTPRequestHandler)
thread = threading.Thread(target=httpd.serve_forever)
thread.start()

# Test HTTP server and shutdown
print(urllib.request.urlopen('http://127.0.0.1:8080/').read())
httpd.shutdown()

这似乎工作正常,但由于运气可能工作正常。你看,我在一个单独的线程中调用 httpd.serve_forever,这样我的脚本就不会在这个调用中阻塞,它可以继续 urllib.request.urlopen调用以测试 HTTP 服务器。

但是我必须确保只有在成功调用了 httpd.serve_forever 并且服务器现在正在处理请求之后,我才进行 urllib.request.urlopen 调用。

http.server.HTTPServersocketserver.TCPServer 中是否有任何标志或方法可以帮助我确保开始使用 urllib 对其进行测试.request.urlopen 仅在准备好处理请求后才打开?

最佳答案

如果您的目标是不在您的 urlopen 中得到一个空的/无效的答案,答案是您不会。你实际上用这行打开了一个套接字:

http.server.HTTPServer(...)

所以在它之后(仍然有一个线程在运行)你已经有一个打开的套接字监听传入的连接(尽管还没有调度请求)。之后我们可能会有两个线程的竞争。考虑两种可能性:

  1. 服务器线程首先运行 serve_forever。好吧,这就是您的目标。
  2. 主线程首先连接。您的连接将被接受并等待将其分派(dispatch)给处理程序。然后服务器线程运行 serve_forever,附加一个调度程序,你的请求仍然得到处理。

关于python - 如何测试 Python http.server.HTTPServer 是否永远服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22606480/

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