我试图发送与web服务并行的httppost请求。具体地说,我想从响应时间的角度对并发请求环境下的web服务进行负载测试。所以我计划使用thread和urllib2来实现这个任务——每个线程都通过urllib2执行一个http请求。在
我是这样做的:import urllib2 as u2
import time
from threading import Thread
def run_job():
try:
req = u2.Request(
url = **the web service url**,
data = **data send to the web service**,
headers = **http header web service requires**,
)
opener = u2.build_opener()
u2.install_opener(opener)
start_time = time.time()
response = u2.urlopen(req, timeout = 60)
end_time = time.time()
html = response.read()
code = response.code
response.close()
if code == 200:
print end_time - start_time
else:
print -1
except Exception, e:
print -2
if __name__ == "__main__":
N = 1
if len(sys.argv) > 1:
N = int(sys.argv[1])
threads = []
for i in range(1, N):
t = Thread(target=run_job, args=())
threads.append(t)
[x.start() for x in threads]
[x.join() for x in threads]
同时,我使用fidller2来捕获发出的请求。Fiddler是一个编写http请求并发送出去的工具,它还可以通过主机捕获http请求。在
当我看到fidler2时,这些请求是一个接一个地发出的,而不是一次全部发出,这是我所期望的。如果fiddler中所描述的是正确的(请求是一个接一个地发出的),据我所知,我想一定有一些请求正在等待的队列。有人能解释一下这背后发生了什么吗?如果可能的话,如何实现真正的并行请求?在
另外,我在请求发生之前和之后放置了两个时间戳,如果在urllib2.urlopen执行之后请求在队列中等待,那么两个时间戳的增量包括在等待队列中花费的时间。有没有可能更精确地测量请求发出和接收之间的时间?在
非常感谢