from tornado import httpclient
import time
start = time.time()
for x in range(1000):
httpclient.AsyncHTTPClient().fetch("https://www.google.com", method="GET")
print ('{0} seconds'.format(time.time() - start))
结果1.11500000954 seconds
我写这篇文章是为了看看我能以多快的速度向任何网站发送1000个请求(我选择谷歌)并且我不知道为什么,但我觉得我做错了什么并且实际上并没有这么快,如果我确实做错了什么,有人可以指出我的错误吗?
谢谢!
答案 0 :(得分:6)
嗯,是的,你将1000个异步请求分拆给谷歌并计时。但是,您没有计算实际进行HTTP调用的开销。这需要callback-type处理程序。
答案 1 :(得分:0)
我还没有运行它,所以我可能是错的,但是fetch()是一个采用回调的异步方法,回调是处理来自服务器的响应。换句话说,我很确定你在这里~1秒内所做的一切就是创建请求的表示 - 你绝对不会等待回复,而且我不确定你是否一定要发送要求。我不知道这里的内部实现,但你可能会在某种意义上缓冲它们,或者你可能试图尽可能快地发送它们但是有些/很多都失败了 - 你真的不知道实际发生了什么,因为这些异步请求是“一劳永逸”。
如果您想知道可以发送多少USEFUL请求,例如那些将到达服务器并获得响应的请求,您需要在回调中执行计时,而不是在创建请求的线程中。
答案 2 :(得分:0)