您的位置:首页 > 编程语言 > Python开发

gevent 写的bench URL 的小工具

2015-08-25 11:02 519 查看
#!/usr/bin/pythonimport geventfrom gevent import monkeymonkey.patch_all()import urllib2import timeimport sysimport mathclass Result:def __init__(self):self.totalCnt = 0self.successCnt = 0self.failureCnt = 0self.timers = []# An HTTPRedirectHandler to disable redirects.class NoRedirectHandler(urllib2.HTTPRedirectHandler):def http_error_307(self, req, fp, code, msg, hdrs):return Nonedef download(cnt, result, url):for i in xrange(cnt):startTime = time.time()try:res = urllib2.urlopen(url)data = res.read()#print datares.close()result.timers.append(time.time() - startTime)result.successCnt += 1except urllib2.HTTPError as e:if e.code == 307:result.timers.append(time.time() - startTime)result.successCnt += 1else:print >> sys.stderr, eexcept Exception as e:print >> sys.stderr, eresult.failureCnt += 1finally:result.totalCnt += 1opener = urllib2.build_opener(NoRedirectHandler())urllib2.install_opener(opener)result = Result()concur = int(sys.argv[1])cnt = int(sys.argv[2])if len(sys.argv) >= 4:url = sys.argv[3]else:url = "https://proxy.uswest.tmicss.com/auth?forward=http%3A%2F%2Fwww.cnn.com%2F"cookie = { "Cookie": "abc=853fbf9dbb439f08b250fbac43084a43bbc506ea0f27dac0613fe54a850527cf" }req = urllib2.Request(url, headers=cookie)#req = urllib2.Request(url)startTime = time.time()jobs = [ gevent.spawn(download, cnt, result, req) for i in xrange(concur) ]gevent.joinall(jobs)stopTime = time.time()print "%d successful of %d requests in %0.3f seconds" % (result.successCnt, result.totalCnt, stopTime - startTime)avg = math.fsum(result.timers) / len(result.timers)print "average time per request: %0.3f seconds" % avgstddev = math.fsum(map(lambda x: (x - avg) * (x - avg), result.timers))stddev = math.pow(stddev / len(result.timers), 0.5)print "std dev: %0.3f" % stddevsortedTimers = sorted(result.timers)print "median: %0.3f seconds" % (sortedTimers[len(sortedTimers)/2])#print sortedTimers
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python