如何测试Python http.server.HTTPServer是否永远服务?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何测试Python http.server.HTTPServer是否永远服务?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1312字,纯文字阅读大概需要2分钟。
内容图文
我正在编写此演示代码来启动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.HTTPServer或socketserver.TCPServer中是否有任何标志或任何方法可以帮助我确保仅在准备好处理请求之后才开始使用urllib.request.urlopen对其进行测试?
解决方法:
如果您的目标不是在urlopen中得到空的/无效的答案,答案是您不会.
您实际上使用以下行打开了一个套接字:
http.server.HTTPServer(...)
因此,在运行完一个线程之后,您已经有了一个开放的套接字来监听传入的连接(尽管还没有调度请求).之后,我们可能会遇到两个线程的竞争.考虑两种可能性:
>服务器线程首先运行serve_forever.好吧,这就是您要针对的情况.
>主线程首先连接.您的连接将被接受,并等待将其分派给处理程序.然后,服务器线程运行serve_forever,附加一个调度程序,您的请求仍然得到处理.
内容总结
以上是互联网集市为您收集整理的如何测试Python http.server.HTTPServer是否永远服务?全部内容,希望文章能够帮你解决如何测试Python http.server.HTTPServer是否永远服务?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。