Skip to content

Instantly share code, notes, and snippets.

@amcgregor
Last active October 7, 2015 06:18
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save amcgregor/3119134 to your computer and use it in GitHub Desktop.
A gentle comparison between the coverage reports for identical sample applications across two frameworks, Pyramid and WebCore 2.

The attached CSV files represent the output of the coverage.py running each of the framework’s ‘hello {name}’ examples. Each provide effectively identical example code (one using explicit route/view registration, the other using object dispatch) with absolutely no framework options enabled at all.

The results speak for themselves:

Framework Modules Compiled Executed Skipped Efficiency v. Pyr v. WC RAM
Pyramid 154 21,782 8,055 13,727 36.98% 100% 739% 20.2M
WebCore 2 39 1,938 1,089 849 56.19% 13% 100% 14.4M
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
def hello(request):
return Response('Hello %(name)s!' % request.matchdict)
if __name__ == '__main__':
config = Configurator()
config.add_route('hello', '/hello/{name}')
config.add_view(hello, route_name='hello')
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
8055 total statements executed (63.02% of 21782 compiled statements skipped) in 154 modules.
module statements skipped run
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/__init__ 5 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/astutil 648 525 19%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/codegen 144 89 38%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/compiler 659 513 22%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/config 21 5 76%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/exc 128 106 17%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/i18n 28 21 25%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/interfaces 7 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/loader 122 89 27%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/metal 1 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/namespaces 9 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/nodes 76 5 93%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/parser 159 124 22%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/program 24 12 50%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/py25 27 15 44%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/py26 14 12 14%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/tal 183 129 30%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/tales 185 110 41%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/template 204 129 37%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/tokenize 98 41 58%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/utils 238 152 36%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/zpt/__init__ 0 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/zpt/loader 14 6 57%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/zpt/program 374 313 16%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Chameleon-2.9.2-py2.7.egg/chameleon/zpt/template 138 75 46%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/__init__ 1 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/_ast_util 533 435 18%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/ast 79 65 18%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/cache 63 36 43%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/codegen 565 503 11%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/exceptions 147 116 21%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/ext/__init__ 0 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/ext/pygmentplugin 41 11 73%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/filters 79 42 47%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/lexer 248 225 9%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/lookup 110 90 18%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/parsetree 259 160 38%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/pygen 127 110 13%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/pyparser 345 310 10%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/runtime 412 313 24%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/template 218 181 17%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Mako-0.7.0-py2.7.egg/mako/util 270 200 26%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/MarkupSafe-0.15-py2.7-macosx-10.7-intel.egg/markupsafe/__init__ 110 56 49%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/__init__ 29 19 34%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/console 42 16 62%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/filter 24 14 42%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/filters/__init__ 160 125 22%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/formatter 27 5 81%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/formatters/__init__ 43 25 42%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/formatters/_mapping 47 30 36%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/formatters/bbcode 56 45 20%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/formatters/html 313 223 29%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/formatters/img 234 169 28%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/formatters/latex 132 115 13%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/formatters/other 68 50 26%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/formatters/rtf 65 53 18%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/formatters/svg 70 57 19%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/formatters/terminal 36 21 42%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/formatters/terminal256 133 113 15%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/lexer 376 252 33%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/lexers/__init__ 134 108 19%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/lexers/_mapping 27 24 11%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/lexers/agile 294 138 53%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/lexers/compiled 410 206 50%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/lexers/functional 270 126 53%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/lexers/jvm 94 8 91%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/lexers/web 438 197 55%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/plugin 29 18 38%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/scanner 41 29 29%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/style 75 14 81%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/styles/__init__ 27 14 48%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/styles/default 7 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/token 54 12 78%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/unistring 68 25 63%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/Pygments-1.5-py2.7.egg/pygments/util 122 81 34%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/__init__ 7 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/acceptparse 195 144 26%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/byterange 96 77 20%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/cachecontrol 138 86 38%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/compat 40 12 70%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/cookies 246 149 39%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/datetime_utils 64 39 39%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/descriptors 196 118 40%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/etag 96 47 51%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/exc 331 97 71%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/headers 105 69 34%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/multidict 307 203 34%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/request 890 683 23%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/response 672 480 29%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/WebOb-1.2-py2.7.egg/webob/util 26 14 46%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/repoze.lru-0.5-py2.7.egg/repoze/lru/__init__ 167 118 29%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/translationstring-1.1-py2.7.egg/translationstring/__init__ 110 88 20%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/translationstring-1.1-py2.7.egg/translationstring/compat 2 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/venusian-1.0a6-py2.7.egg/venusian/__init__ 118 101 14%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/venusian-1.0a6-py2.7.egg/venusian/advice 29 25 14%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/venusian-1.0a6-py2.7.egg/venusian/compat/__init__ 4 1 75%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/zope.deprecation-4.0.0-py2.7.egg/zope/deprecation/__init__ 7 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/zope.deprecation-4.0.0-py2.7.egg/zope/deprecation/deprecation 127 54 57%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/zope.interface-4.0.1-py2.7-macosx-10.7-intel.egg/zope/interface/__init__ 30 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/zope.interface-4.0.1-py2.7-macosx-10.7-intel.egg/zope/interface/_compat 3 0 100%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/zope.interface-4.0.1-py2.7-macosx-10.7-intel.egg/zope/interface/adapter 443 243 45%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/zope.interface-4.0.1-py2.7-macosx-10.7-intel.egg/zope/interface/advice 66 56 15%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/zope.interface-4.0.1-py2.7-macosx-10.7-intel.egg/zope/interface/declarations 308 126 59%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/zope.interface-4.0.1-py2.7-macosx-10.7-intel.egg/zope/interface/exceptions 21 8 62%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/zope.interface-4.0.1-py2.7-macosx-10.7-intel.egg/zope/interface/interface 381 157 59%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/zope.interface-4.0.1-py2.7-macosx-10.7-intel.egg/zope/interface/interfaces 140 1 99%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/zope.interface-4.0.1-py2.7-macosx-10.7-intel.egg/zope/interface/registry 296 160 46%
/Users/amcgregor/Projects/pyramid/lib/python2.7/site-packages/zope.interface-4.0.1-py2.7-macosx-10.7-intel.egg/zope/interface/ro 25 0 100%
pyramid/pyramid/__init__ 5 0 100%
pyramid/pyramid/asset 30 23 23%
pyramid/pyramid/authorization 48 39 19%
pyramid/pyramid/chameleon_text 51 25 51%
pyramid/pyramid/chameleon_zpt 51 25 51%
pyramid/pyramid/compat 58 9 84%
pyramid/pyramid/config/__init__ 333 115 65%
pyramid/pyramid/config/adapters 61 47 23%
pyramid/pyramid/config/assets 158 121 23%
pyramid/pyramid/config/factories 49 37 24%
pyramid/pyramid/config/i18n 51 37 27%
pyramid/pyramid/config/rendering 27 9 67%
pyramid/pyramid/config/routes 77 22 71%
pyramid/pyramid/config/security 38 29 24%
pyramid/pyramid/config/settings 72 15 79%
pyramid/pyramid/config/testing 44 31 30%
pyramid/pyramid/config/tweens 154 134 13%
pyramid/pyramid/config/util 188 129 31%
pyramid/pyramid/config/views 626 359 43%
pyramid/pyramid/config/zca 8 4 50%
pyramid/pyramid/decorator 11 5 55%
pyramid/pyramid/encode 28 23 18%
pyramid/pyramid/events 39 12 69%
pyramid/pyramid/exceptions 24 11 54%
pyramid/pyramid/httpexceptions 269 68 75%
pyramid/pyramid/i18n 136 105 23%
pyramid/pyramid/interfaces 247 0 100%
pyramid/pyramid/location 13 11 15%
pyramid/pyramid/mako_templating 127 95 25%
pyramid/pyramid/path 173 100 42%
pyramid/pyramid/registry 138 51 63%
pyramid/pyramid/renderers 273 208 24%
pyramid/pyramid/request 182 97 47%
pyramid/pyramid/response 64 36 44%
pyramid/pyramid/router 97 12 88%
pyramid/pyramid/security 128 87 32%
pyramid/pyramid/settings 28 8 71%
pyramid/pyramid/static 65 46 29%
pyramid/pyramid/threadlocal 26 8 69%
pyramid/pyramid/traversal 216 136 37%
pyramid/pyramid/tweens 30 14 53%
pyramid/pyramid/url 206 176 15%
pyramid/pyramid/urldispatch 133 44 67%
pyramid/pyramid/util 115 68 41%
pyramid/pyramid/view 129 84 35%
hello 12 0 100%
# encoding: utf-8
class Root(object):
def __init__(self, context):
self._ctx = context
def hello(self, name):
return "Hello " + name
if __name__ == '__main__':
from web.core.application import Application
from wsgiref.simple_server import make_server
make_server('127.0.0.1', 8080, Application(Root)).serve_forever()
1089 total statements executed (43.81% of 1938 compiled statements skipped) in 39 modules.
module statements skipped run
marrow.logging/marrow/logging/__init__ 6 0 100%
marrow.logging/marrow/logging/formats 47 7 85%
marrow.logging/marrow/logging/level 21 3 86%
marrow.logging/marrow/logging/log 64 15 77%
marrow.logging/marrow/logging/message 28 8 71%
marrow.templating/alacarte/util 54 39 28%
marrow.templating/marrow/templating/core 5 0 100%
marrow.templating/marrow/templating/engines 44 18 59%
marrow.templating/marrow/templating/resolver 40 30 25%
marrow.templating/marrow/templating/template/engine 34 25 26%
marrow.templating/marrow/templating/util 54 42 22%
marrow.util/marrow/util/bunch 42 25 40%
marrow.util/marrow/util/compat 50 27 46%
marrow.util/marrow/util/insensitive 27 6 78%
marrow.util/marrow/util/object 136 92 32%
marrow.util/marrow/util/path 45 10 78%
marrow.util/marrow/util/tuple 71 43 39%
marrow.util/marrow/util/url 175 129 26%
marrow.wsgi.objects/marrow/wsgi/__init__ 0 0 100%
marrow.wsgi.objects/marrow/wsgi/exceptions 200 20 90%
marrow.wsgi.objects/marrow/wsgi/objects/__init__ 3 0 100%
marrow.wsgi.objects/marrow/wsgi/objects/adapters/__init__ 9 0 100%
marrow.wsgi.objects/marrow/wsgi/objects/adapters/args 46 18 61%
marrow.wsgi.objects/marrow/wsgi/objects/adapters/base 46 16 65%
marrow.wsgi.objects/marrow/wsgi/objects/adapters/body 24 18 25%
marrow.wsgi.objects/marrow/wsgi/objects/adapters/content 63 22 65%
marrow.wsgi.objects/marrow/wsgi/objects/adapters/misc 5 1 80%
marrow.wsgi.objects/marrow/wsgi/objects/adapters/status 21 5 76%
marrow.wsgi.objects/marrow/wsgi/objects/request 121 57 53%
marrow.wsgi.objects/marrow/wsgi/objects/response 77 19 75%
webcore/web/core/__init__ 0 0 100%
webcore/web/core/application 111 23 79%
webcore/web/core/response 13 1 92%
webcore/web/dialect/__init__ 1 0 100%
webcore/web/dialect/dispatch 75 43 43%
webcore/web/ext/base/__init__ 49 4 92%
webcore/web/ext/base/handler 31 14 55%
webcore/web/ext/base/helpers 91 68 25%
hello 9 1 89%
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment