我必须模拟 Web 应用程序的负载。
我编写了一个 python 代码,它按照指数分布生成随机请求。
该请求是一个简单的 url-get:我测量响应时间并将其存储在一个文件中。
因此,对于给定的时间,代码会创建一个执行请求的新进程,然后他会休眠由 random.expovariate(lambd) 给出的随机时间。
当我开始一个请求时,我还会存储一个时间戳来检查平均值是否接近 1/lambda。
当我设置 lambda > 20 时出现问题:平均值高于 1/lambda,这会导致执行缓慢。
我测试了随机生成器,它非常好,所以我认为问题在于系统必须创建一个新进程。
有没有办法加快这个阶段?
也许对进程的创建有一些限制?
我忘了说python版本是2.7.3,我不能升级它。
使用 pypy 有一些性能改进,但问题仍然存在。
这里的代码:
def request(results,url):
start = time.time()
try:
r = requests.get(url)
except:
noactions
else:
# Append results (in seconds)
results.write("{0},{1}\n".format(start,r.elapsed.microseconds/1e6))
def main():
# Open results file
results = open(responseTimes.txt",'a')
processes = []
# Perform requests for time t (seconds) with rate lambda=l
start = time.time()
elapsed = 0
while (t > elapsed):
p = Process(target=request, args=(results,url,))
p.daemon = True
p.start()
processes.append(p)
time.sleep(random.expovariate(l))
elapsed = time.time() - start
# Wait for all processes to finish
[p.join() for p in processes]
# Close the file
results.close()
if __name__ == "__main__":
main()