Add a simple HTTP benchmark
This commit is contained in:
parent
dfac3a67b5
commit
ade3ce2e98
|
@ -0,0 +1,45 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# A simple benchmark of tornado's HTTP stack.
|
||||
# Requires 'ab' to be installed.
|
||||
#
|
||||
# Running without profiling:
|
||||
# demos/benchmark/benchmark.py
|
||||
#
|
||||
# Running with profiling:
|
||||
#
|
||||
# python -m cProfile -o /tmp/prof demos/benchmark/benchmark.py
|
||||
# python -c 'import pstats; pstats.Stats("/tmp/prof").strip_dirs().sort_stats("time").print_callers(20)'
|
||||
|
||||
from tornado.ioloop import IOLoop
|
||||
from tornado.options import define, options, parse_command_line
|
||||
from tornado.web import RequestHandler, Application
|
||||
|
||||
import signal
|
||||
import subprocess
|
||||
|
||||
|
||||
define("port", type=int, default=8888)
|
||||
|
||||
class RootHandler(RequestHandler):
|
||||
def get(self):
|
||||
self.write("Hello, world")
|
||||
|
||||
def _log(self):
|
||||
pass
|
||||
|
||||
def handle_sigchld(sig, frame):
|
||||
IOLoop.instance().add_callback(IOLoop.instance().stop)
|
||||
|
||||
def main():
|
||||
parse_command_line()
|
||||
app = Application([("/", RootHandler)])
|
||||
app.listen(options.port)
|
||||
signal.signal(signal.SIGCHLD, handle_sigchld)
|
||||
proc = subprocess.Popen(
|
||||
"ab -n 10000 -c 25 http://127.0.0.1:%d/" % options.port,
|
||||
shell=True)
|
||||
IOLoop.instance().start()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue