如何在独立线程Python中启动模拟HTTP服务器?

2024-04-30 00:57:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python脚本中模拟HTTP服务器,但是失败了。 我正在做的是:

import bottle
from restclient import GET
from threading import Thread

@bottle.route("/go")
def index():
    return "ok"


server = Thread(target = bottle.run)
server.setDaemon(True)
server.start()

print "Server started..."

response = GET("http://127.0.0.1:8080/go")

assert response.body == "ok"

print "Done..."

基本上我正在尝试发射瓶子.py在单独的线程中具有1个测试路由的http服务器,然后从中模拟响应。在

但它就是不起作用。服务器不是在一个单独的线程中启动的,所以当我试图请求它时,总是得到“errno 111 connection declined”。在

问题是如何解决的?有没有其他方法可以模拟http服务器?在


Tags: fromimport服务器脚本httpgobottleget
1条回答
网友
1楼 · 发布于 2024-04-30 00:57:34

您没有留出足够的时间来启动Web服务器。在

当您这样做时:

server.start()
print "Server started..."
response = GET("http://127.0.0.1:8080/go")   

你刚启动服务器就试图访问它

根据哪个线程(主线程或服务器线程)首先运行(以及运行多长时间),当您试图访问它时,可能会出现服务器尚未启动的情况,因此出现Connection Refused错误。在

您可以尝试执行以下操作:

^{pr2}$

正如您在time.sleep sleeps thread or process?中看到的,执行time.sleep操作只会使当前正在运行的线程休眠,因此您可以给服务器线程留出足够的时间来启动。在

现在,所有这些都有点老套了,所以您可能需要检查一下服务器的启动过程,看看是否有一种方法可以评估服务器是否已经启动并正在运行,并在启动之前等待这种情况。在

现在看一下瓶子源代码,我无法找到一个干净的解决方案;您可以一直尝试重复地攻击服务器,直到服务器最终响应为止,从而表明服务器是活动的。在

相关问题 更多 >