diff --git a/extras/qps-bench-server.py b/extras/qps-bench-server.py index b2c824bb3..da7a0022b 100755 --- a/extras/qps-bench-server.py +++ b/extras/qps-bench-server.py @@ -39,9 +39,9 @@ class Root(Resource): qps = len(self.tail) / sum(self.tail) print('samplesize={0} concurrent={1} qps={2:0.2f}'.format(len(self.tail), self.concurrent, qps)) - if 'sleep' in request.args: - sleep = float(request.args['sleep'][0]) - reactor.callLater(sleep, self._finish, request) + if 'latency' in request.args: + latency = float(request.args['latency'][0]) + reactor.callLater(latency, self._finish, request) return NOT_DONE_YET self.concurrent -= 1 diff --git a/extras/qpsclient.py b/extras/qpsclient.py index 53783b52a..4cdaecb2a 100644 --- a/extras/qpsclient.py +++ b/extras/qpsclient.py @@ -3,7 +3,7 @@ A spider that generate light requests to meassure QPS troughput usage: - scrapy runspider qpsclient.py --loglevel=INFO --set RANDOMIZE_DOWNLOAD_DELAY=0 --set CONCURRENT_REQUESTS=50 -a qps=10 -a sleep=0.3 + scrapy runspider qpsclient.py --loglevel=INFO --set RANDOMIZE_DOWNLOAD_DELAY=0 --set CONCURRENT_REQUESTS=50 -a qps=10 -a latency=0.3 """ @@ -16,27 +16,40 @@ class QPSSpider(BaseSpider): name = 'qps' benchurl = 'http://localhost:8880/' - # Max concurrency is limited by global CONCURRENT_REQUESTS setting max_concurrent_requests = 8 # Requests per second goal qps = None # same as: 1 / download_delay + download_delay = None # time in seconds to delay server responses - sleep = None + latency = None + # number of slots to create + slots = 1 def __init__(self, *a, **kw): super(QPSSpider, self).__init__(*a, **kw) if self.qps is not None: self.qps = float(self.qps) self.download_delay = 1 / self.qps + elif self.download_delay is not None: + self.download_delay = float(self.download_delay) def start_requests(self): url = self.benchurl - if self.sleep is not None: - url += '?sleep={0}'.format(self.sleep) + if self.latency is not None: + url += '?latency={0}'.format(self.latency) + slots = int(self.slots) + if slots > 1: + urls = [url.replace('localhost', '127.0.0.%d' % (x + 1)) for x in xrange(slots)] + else: + urls = [url] + + idx = 0 while True: + url = urls[idx % len(urls)] yield Request(url, dont_filter=True) + idx += 1 def parse(self, response): pass