{"id":975,"date":"2010-06-29T00:22:00","date_gmt":"2010-06-29T04:22:00","guid":{"rendered":"http:\/\/cd34.com\/blog\/?p=975"},"modified":"2010-06-29T00:22:00","modified_gmt":"2010-06-29T04:22:00","slug":"a-weekend-with-tornado","status":"publish","type":"post","link":"https:\/\/cd34.com\/blog\/infrastructure\/a-weekend-with-tornado\/","title":{"rendered":"A weekend with Tornado"},"content":{"rendered":"<p>After working on a <a href=\"http:\/\/pylonshq.com\">Pylons<\/a> project for a week or so, there was a minor part of it that I felt didn&#8217;t need the complexity of a framework.  Some quick benchmarking of the most minimal Pylons\/SQLAlchemy project I could muster came in around 200 requests per second which put me at roughly 12 million requests per day based on the typical curve.<\/p>\n<p>Within 15 minutes of installing <a href=\"http:\/\/www.tornadoweb.org\/\">Tornado<\/a> and using their simple hello world example, I imported SQLAlchemy and ended up boosting this to 280 requests per second.  As I really didn&#8217;t need any of the features from the ORM, I decided to use tornado.database which isn&#8217;t much more than a bare wrapper to python-mysql.  Even with a single worker process, I was able to get 870 requests per second.  56 million requests per day, without any tuning?<\/p>\n<p>I&#8217;m reasonably impressed.  Once I put it on production hardware, I&#8217;m thinking I&#8217;ll easily be able to count on double those numbers if not more.<\/p>\n<p>Next weekend, <a href=\"http:\/\/trafficserver.apache.org\/\">Traffic Server<\/a>.<\/p>\n<div style=\"float:left;\">\n<div id=\"fb-root\"><\/div>\n<fb:like href=\"https:\/\/cd34.com\/blog\/infrastructure\/a-weekend-with-tornado\/\" width=\"250\" send=\"false\" show_faces=\"false\" layout=\"button_count\" action=\"recommend\"><\/fb:like>\n<\/div><div style=\"clear:both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>After working on a Pylons project for a week or so, there was a minor part of it that I felt didn&#8217;t need the complexity of a framework. Some quick benchmarking of the most minimal Pylons\/SQLAlchemy project I could muster came in around 200 requests per second which put me at roughly 12 million requests [&hellip;]<\/p>\n<div style=\"float:left;\">\n<div id=\"fb-root\"><\/div>\n<fb:like href=\"https:\/\/cd34.com\/blog\/infrastructure\/a-weekend-with-tornado\/\" width=\"250\" send=\"false\" show_faces=\"false\" layout=\"button_count\" action=\"recommend\"><\/fb:like>\n<\/div><div style=\"clear:both;\"><\/div>","protected":false},"author":15,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,5],"tags":[],"class_list":["post-975","post","type-post","status-publish","format-standard","hentry","category-python","category-infrastructure"],"_links":{"self":[{"href":"https:\/\/cd34.com\/blog\/wp-json\/wp\/v2\/posts\/975","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cd34.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cd34.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cd34.com\/blog\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/cd34.com\/blog\/wp-json\/wp\/v2\/comments?post=975"}],"version-history":[{"count":1,"href":"https:\/\/cd34.com\/blog\/wp-json\/wp\/v2\/posts\/975\/revisions"}],"predecessor-version":[{"id":976,"href":"https:\/\/cd34.com\/blog\/wp-json\/wp\/v2\/posts\/975\/revisions\/976"}],"wp:attachment":[{"href":"https:\/\/cd34.com\/blog\/wp-json\/wp\/v2\/media?parent=975"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cd34.com\/blog\/wp-json\/wp\/v2\/categories?post=975"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cd34.com\/blog\/wp-json\/wp\/v2\/tags?post=975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}