From ade3ce2e9819b38f462fddfdc618845e2c9c94fd Mon Sep 17 00:00:00 2001 From: Ben Darnell Date: Fri, 10 Dec 2010 17:03:21 -0800 Subject: [PATCH] Add a simple HTTP benchmark --- demos/benchmark/benchmark.py | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 demos/benchmark/benchmark.py diff --git a/demos/benchmark/benchmark.py b/demos/benchmark/benchmark.py new file mode 100755 index 00000000..9236a247 --- /dev/null +++ b/demos/benchmark/benchmark.py @@ -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()