Skip to main content

A profiler for Tornado Web Server

Project description


A profiler measures endpoints defined in your tornado application.


Dashboard: Give a summary of all datas

If an endpoint has been accessed before, you can see its summary data as follows.


Filtering: Give filtered datas

You can create filters to get datas that meet the criterias.


Context: Give all details of a request

You can get all details of a request as you wish.



PyPI version:

$ pip install tornado-profiler

Development version:

$ pip install

Quick Start

Just add a few lines to you codes:

import tornado.ioloop
import tornado.web

from tornado_profiler import Profiler

class MainHandler(tornado.web.RequestHandler):
    def get(self):

class HelloHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def make_app():
    app = tornado.web.Application([
        (r"/", MainHandler),

    # use to store measurement datas
    backend = {
        "engine": "sqlalchemy",
    # instantiate profiler
    profiler = Profiler(backend)
    # do something to your app

    # you can add some rules that won't be profiled here
    app.add_handlers(r".*", [
        (r"/hello", HelloHandler),

    return app

if __name__ == "__main__":
    app = make_app()

Now run your and make some requests as follows:

$ curl
$ curl

If everything is ok, tornado-profiler will measure these requests. You can see the result heading to or get results as JSON

Data Storage Backend

You can use some databases to store your measurement data, such as SQLite, Mysql. The drivers we support are shown as follows:


In order to use SQLAlchemy, just specify backend's engine as "sqlalchemy". This will use SQLite by default and save it to tornado_profiler.db in your working directory.

backend = {
    "engine": "sqlalchemy",

If your want to change default sqlite database filename or use other databases, you need to set db_url manually:

backend = {
    "engine": "sqlalchemy",
    "db_url": "sqlite:///dbname.db",

backend = {
    "engine": "sqlalchemy",
    "db_url": "mysql+<driver-name>://user:password@<host>[:<port>]/<dbname>",

Setting some attributes of SQLAlchemy is also necessary, you just need to pass them into the backend dict:

backend = {
    "engine": "sqlalchemy",
    "db_url": "mysql+<driver-name>://user:password@<host>[:<port>]/<dbname>",
    # attributes
    "pool_recycle": 3600,
    "pool_timeout": 30,
    "pool_size": 30,
    "max_overflow": 20,

In some scenarios, we do not want to persist measurement datas, we can use the in-memory database of SQLite and datas will be lost when your web server stops or restarts:

backend = {
    "engine": "sqlalchemy",
    "db_url": "sqlite://",

Other Drivers

coming soon!


If you have any other requirements, please submit PR or issues. I will reply to you as soon as possible.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for tornado-profiler, version 1.0.0
Filename, size File type Python version Upload date Hashes
Filename, size tornado_profiler-1.0.0-py3-none-any.whl (1.2 MB) File type Wheel Python version py3 Upload date Hashes View
Filename, size tornado-profiler-1.0.0.tar.gz (1.3 MB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page