<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.0">Jekyll</generator><link href="http://klen.github.io/py-frameworks-bench/feed.xml" rel="self" type="application/atom+xml" /><link href="http://klen.github.io/py-frameworks-bench/" rel="alternate" type="text/html" /><updated>2022-03-14T17:18:54+00:00</updated><id>http://klen.github.io/py-frameworks-bench/feed.xml</id><title type="html">Python Async (ASGI) Web Frameworks Benchmark</title><subtitle>This is a simple benchmark for python async frameworks.</subtitle><author><name>Kirill Klenov</name></author><entry><title type="html">Results (2022-03-14)</title><link href="http://klen.github.io/py-frameworks-bench/results/2022/03/14/results.html" rel="alternate" type="text/html" title="Results (2022-03-14)" /><published>2022-03-14T00:00:00+00:00</published><updated>2022-03-14T00:00:00+00:00</updated><id>http://klen.github.io/py-frameworks-bench/results/2022/03/14/results</id><content type="html" xml:base="http://klen.github.io/py-frameworks-bench/results/2022/03/14/results.html">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js@3.2.1/dist/chart.min.js&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is a simple benchmark for python async frameworks. Almost all of the
frameworks are ASGI-compatible (aiohttp and tornado are exceptions on the
moment).&lt;/p&gt;

  &lt;p&gt;The objective of the benchmark is not testing deployment (like uvicorn vs
hypercorn and etc) or database (ORM, drivers) but instead test the frameworks
itself. The benchmark checks request parsing (body, headers, formdata,
queries), routing, responses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read more about the benchmark: &lt;a href=&quot;/py-frameworks-bench/about/&quot;&gt;The Methodic&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#composite&quot;&gt;Composite stats &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;canvas id=&quot;chart&quot; style=&quot;margin-bottom: 2em&quot;&gt;&lt;/canvas&gt;
&lt;script&gt;
    var ctx = document.getElementById('chart').getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ['blacksheep','sanic','muffin','falcon','starlette','baize','emmett','fastapi','aiohttp','tornado','quart','django',],
            datasets: [
                {
                    label: 'Single HTML response (req/s)',
                    data: ['18546','16571','15558','15554','13880','13797','13380','9060','7240','3425','3232','1002',],
                    backgroundColor: [
                        '#b9ddf1', '#afd6ed', '#a5cfe9', '#9bc7e4', '#92c0df', '#89b8da', '#80b0d5', '#79aacf', '#72a3c9', '#6a9bc3', '#6394be', '#5b8cb8', '#5485b2', '#4e7fac', '#4878a6', '#437a9f', '#3d6a98', '#376491', '#305d8a', '#2a5783',
                    ].reverse()
                },
                {
                    label: 'Work with JSON (req/s)',
                    data: ['10777','10505','10319','10133','8135','7091','6581','5882','4496','2780','2146','883',],
                    backgroundColor: [
                        '#b3e0a6', '#a5db96', '#98d687', '#8ed07f', '#85ca77', '#7dc370', '#75bc69', '#6eb663', '#67af5c', '#61a956', '#59a253', '#519c51', '#49964f', '#428f4d', '#398949', '#308344', '#2b7c40', '#27763d', '#256f3d', '#24693d',
                    ].reverse()
                },
                {
                    label: 'Upload file (req/s)',
                    data: ['5604','5025','4425','3433','2834','2434','2218','2099','2067','1746','1414','689',],
                    backgroundColor: [
                        '#ffc685', '#fcbe75', '#f9b665', '#f7ae54', '#f5a645', '#f59c3c', '#f49234', '#f2882d', '#f07e27', '#ee7422', '#e96b20', '#e36420', '#db5e20', '#d25921', '#ca5422', '#c14f22', '#b84b23', '#af4623', '#a64122', '#9e3d22',
                    ].reverse()
                },
            ]
        }
    });
&lt;/script&gt;

&lt;h2 id=&quot;html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/h2&gt;

&lt;p&gt;The test simulates just a single HTML response.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18546&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.80&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.53&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.41&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.87.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16571&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.09&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.83&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.12.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15558&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.70&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.14&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.08&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15554&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.29&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.08&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13880&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.69&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.58&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.17.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13797&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.70&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.60&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.4.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13380&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.54&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.10&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.75&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.75.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9060&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.46&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.79&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.03&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.8.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7240&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.74&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.84&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3425&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.68&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3232&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.76&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.94&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.81&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;4.0.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1002&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;59.00&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;66.26&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;63.72&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/h2&gt;
&lt;p&gt;The test simulates a simple JSON REST API endpoint.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.12.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10777&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.97&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.67&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.90&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10505&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.70&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.07&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.87.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10319&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.79&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.41&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.17&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10133&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.88&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.28&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.17.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8135&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.76&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.83&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.4.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7091&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.12&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6581&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.24&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.71&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.75.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5882&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.36&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.85&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.8.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4496&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.15&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.32&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.24&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2780&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.95&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.02&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2146&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.42&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.81&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;4.0.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;883&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;68.00&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;71.74&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;72.37&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/h2&gt;
&lt;p&gt;The test simulates multipart formdata processing and work with files.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5604&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.87&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.77&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.40&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.12.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5025&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.44&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.72&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.87.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4425&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.14&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.43&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3433&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.73&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2834&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.89&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.57&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.17.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2434&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.10&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.39&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.26&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.8.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2218&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.81&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.09&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.84&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.75.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2099&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;41.91&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.44&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2067&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.89&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.09&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.95&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1746&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.68&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;37.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.63&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.4.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1414&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;41.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;50.86&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;45.21&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;4.0.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;689&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;86.45&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;89.44&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;92.51&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;composite&quot;&gt;Composite stats&lt;/h2&gt;
&lt;p&gt;Combined benchmarks results&lt;/p&gt;

&lt;p&gt;Sorted by completed requests&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests completed&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;519825&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.46&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.96&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.12.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;470400&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.37&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.88&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.57&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.87.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;469725&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.34&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.19&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.14&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;436800&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.19&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.7&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.17.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;365490&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.94&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.77&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;349425&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.85&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.64&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.29&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.4.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;328275&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.18&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.85&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.69&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.75.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;255615&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.29&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.11&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.8.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;209310&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.47&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.31&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;121185&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.53&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.73&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.59&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;109755&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.36&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.24&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.37&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;4.0.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38610&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;71.15&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;75.81&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;76.2&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content><author><name>Kirill Klenov</name></author><category term="results" /><summary type="html"></summary></entry><entry><title type="html">Results (2021-12-27)</title><link href="http://klen.github.io/py-frameworks-bench/results/2021/12/27/results.html" rel="alternate" type="text/html" title="Results (2021-12-27)" /><published>2021-12-27T00:00:00+00:00</published><updated>2021-12-27T00:00:00+00:00</updated><id>http://klen.github.io/py-frameworks-bench/results/2021/12/27/results</id><content type="html" xml:base="http://klen.github.io/py-frameworks-bench/results/2021/12/27/results.html">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js@3.2.1/dist/chart.min.js&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is a simple benchmark for python async frameworks. Almost all of the
frameworks are ASGI-compatible (aiohttp and tornado are exceptions on the
moment).&lt;/p&gt;

  &lt;p&gt;The objective of the benchmark is not testing deployment (like uvicorn vs
hypercorn and etc) or database (ORM, drivers) but instead test the frameworks
itself. The benchmark checks request parsing (body, headers, formdata,
queries), routing, responses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read more about the benchmark: &lt;a href=&quot;/py-frameworks-bench/about/&quot;&gt;The Methodic&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#composite&quot;&gt;Composite stats &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;canvas id=&quot;chart&quot; style=&quot;margin-bottom: 2em&quot;&gt;&lt;/canvas&gt;
&lt;script&gt;
    var ctx = document.getElementById('chart').getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ['blacksheep','muffin','falcon','starlette','baize','emmett','fastapi','aiohttp','tornado','quart','sanic','django',],
            datasets: [
                {
                    label: 'Single HTML response (req/s)',
                    data: ['17085','14801','14133','13154','12233','12200','8834','6419','3073','2969','1511','900',],
                    backgroundColor: [
                        '#b9ddf1', '#afd6ed', '#a5cfe9', '#9bc7e4', '#92c0df', '#89b8da', '#80b0d5', '#79aacf', '#72a3c9', '#6a9bc3', '#6394be', '#5b8cb8', '#5485b2', '#4e7fac', '#4878a6', '#437a9f', '#3d6a98', '#376491', '#305d8a', '#2a5783',
                    ].reverse()
                },
                {
                    label: 'Work with JSON (req/s)',
                    data: ['9393','9323','9101','7198','6490','5874','5632','3986','2457','1925','1427','800',],
                    backgroundColor: [
                        '#b3e0a6', '#a5db96', '#98d687', '#8ed07f', '#85ca77', '#7dc370', '#75bc69', '#6eb663', '#67af5c', '#61a956', '#59a253', '#519c51', '#49964f', '#428f4d', '#398949', '#308344', '#2b7c40', '#27763d', '#256f3d', '#24693d',
                    ].reverse()
                },
                {
                    label: 'Upload file (req/s)',
                    data: ['5051','3914','3161','2402','2142','1926','1913','1910','1572','1270','1186','614',],
                    backgroundColor: [
                        '#ffc685', '#fcbe75', '#f9b665', '#f7ae54', '#f5a645', '#f59c3c', '#f49234', '#f2882d', '#f07e27', '#ee7422', '#e96b20', '#e36420', '#db5e20', '#d25921', '#ca5422', '#c14f22', '#b84b23', '#af4623', '#a64122', '#9e3d22',
                    ].reverse()
                },
            ]
        }
    });
&lt;/script&gt;

&lt;h2 id=&quot;html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/h2&gt;

&lt;p&gt;The test simulates just a single HTML response.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17085&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.07&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.89&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.71&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.86.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14801&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.30&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14133&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.49&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13154&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.98&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.37&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.83&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.17.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12233&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.32&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.84&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.19&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12200&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.20&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.93&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.21&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.70.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8834&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.78&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.64&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.21&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.8.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6419&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.74&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.97&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.97&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3073&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.34&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.30&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.82&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2969&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.59&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.86&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.56&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.12.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1511&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.88&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;59.87&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;42.29&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;4.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;900&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;65.57&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;79.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;71.02&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/h2&gt;
&lt;p&gt;The test simulates a simple JSON REST API endpoint.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9393&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.37&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.13&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.78&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.86.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9323&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.47&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.83&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9101&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.54&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.53&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.99&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.17.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7198&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.06&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.91&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.86&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6490&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.68&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.06&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.93&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5874&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.44&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.87&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.70.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5632&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.81&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.33&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.8.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3986&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.84&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.08&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2457&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.34&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.05&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1925&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.77&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.22&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.12.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1427&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.55&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;63.80&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;44.79&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;4.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;800&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;74.32&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;88.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;79.89&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/h2&gt;
&lt;p&gt;The test simulates multipart formdata processing and work with files.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5051&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.98&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.19&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.64&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.86.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3914&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.24&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.36&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3161&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.65&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.87&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.30&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2402&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.02&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.43&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.64&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.17.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2142&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.13&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.92&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.82&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.8.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1926&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.94&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.22&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1913&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.82&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.44&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.70.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1910&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.28&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;43.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.44&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1572&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;40.84&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;41.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;40.67&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1270&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;47.26&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;55.91&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;50.31&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.12.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1186&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;42.27&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;75.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;53.86&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;4.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;614&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;97.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;104.67&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;104.02&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;composite&quot;&gt;Composite stats&lt;/h2&gt;
&lt;p&gt;Combined benchmarks results&lt;/p&gt;

&lt;p&gt;Sorted by completed requests&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests completed&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;472935&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.14&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.4&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.71&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.86.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;420570&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.42&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.19&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.16&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;395925&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.14&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.59&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.17.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;323595&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.22&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.62&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;321450&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.69&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.11&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;299400&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.3&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.82&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.70.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;245640&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.62&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.8&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.33&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.8.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;184965&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.51&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.76&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;110085&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.34&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.02&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;98550&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.69&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.57&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.12.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;61860&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;66.5&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;46.98&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;4.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34710&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;79.29&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;90.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;84.98&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content><author><name>Kirill Klenov</name></author><category term="results" /><summary type="html"></summary></entry><entry><title type="html">Results (2021-11-02)</title><link href="http://klen.github.io/py-frameworks-bench/results/2021/11/02/results.html" rel="alternate" type="text/html" title="Results (2021-11-02)" /><published>2021-11-02T00:00:00+00:00</published><updated>2021-11-02T00:00:00+00:00</updated><id>http://klen.github.io/py-frameworks-bench/results/2021/11/02/results</id><content type="html" xml:base="http://klen.github.io/py-frameworks-bench/results/2021/11/02/results.html">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js@3.2.1/dist/chart.min.js&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is a simple benchmark for python async frameworks. Almost all of the
frameworks are ASGI-compatible (aiohttp and tornado are exceptions on the
moment).&lt;/p&gt;

  &lt;p&gt;The objective of the benchmark is not testing deployment (like uvicorn vs
hypercorn and etc) or database (ORM, drivers) but instead test the frameworks
itself. The benchmark checks request parsing (body, headers, formdata,
queries), routing, responses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read more about the benchmark: &lt;a href=&quot;/py-frameworks-bench/about/&quot;&gt;The Methodic&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#composite&quot;&gt;Composite stats &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;canvas id=&quot;chart&quot; style=&quot;margin-bottom: 2em&quot;&gt;&lt;/canvas&gt;
&lt;script&gt;
    var ctx = document.getElementById('chart').getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ['blacksheep','muffin','falcon','starlette','baize','emmett','sanic','fastapi','aiohttp','tornado','quart','django',],
            datasets: [
                {
                    label: 'Single HTML response (req/s)',
                    data: ['18312','16350','15212','13746','13505','13085','9570','8684','7292','3423','3318','1883',],
                    backgroundColor: [
                        '#b9ddf1', '#afd6ed', '#a5cfe9', '#9bc7e4', '#92c0df', '#89b8da', '#80b0d5', '#79aacf', '#72a3c9', '#6a9bc3', '#6394be', '#5b8cb8', '#5485b2', '#4e7fac', '#4878a6', '#437a9f', '#3d6a98', '#376491', '#305d8a', '#2a5783',
                    ].reverse()
                },
                {
                    label: 'Work with JSON (req/s)',
                    data: ['10490','10346','9659','8011','7433','6797','6488','6062','4658','2860','2158','1581',],
                    backgroundColor: [
                        '#b3e0a6', '#a5db96', '#98d687', '#8ed07f', '#85ca77', '#7dc370', '#75bc69', '#6eb663', '#67af5c', '#61a956', '#59a253', '#519c51', '#49964f', '#428f4d', '#398949', '#308344', '#2b7c40', '#27763d', '#256f3d', '#24693d',
                    ].reverse()
                },
                {
                    label: 'Upload file (req/s)',
                    data: ['5699','4398','3982','3471','2702','2435','2253','2178','2121','1775','1455','996',],
                    backgroundColor: [
                        '#ffc685', '#fcbe75', '#f9b665', '#f7ae54', '#f5a645', '#f59c3c', '#f49234', '#f2882d', '#f07e27', '#ee7422', '#e96b20', '#e36420', '#db5e20', '#d25921', '#ca5422', '#c14f22', '#b84b23', '#af4623', '#a64122', '#9e3d22',
                    ].reverse()
                },
            ]
        }
    });
&lt;/script&gt;

&lt;h2 id=&quot;html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/h2&gt;

&lt;p&gt;The test simulates just a single HTML response.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18312&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.47&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.47&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.86.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16350&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.37&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.98&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.90&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15212&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.43&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.50&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.18&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.12.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13746&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.92&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.95&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.63&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13505&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.84&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.12&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.71&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13085&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.34&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.86&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.70.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9570&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.86&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.66&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.9.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8684&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.77&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.57&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.41&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.8.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7292&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.57&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.78&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3423&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.27&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.86&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.68&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3318&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.93&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.11&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.29&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1883&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.74&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.28&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/h2&gt;
&lt;p&gt;The test simulates a simple JSON REST API endpoint.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10490&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.77&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.20&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.08&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.86.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10346&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.20&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.15&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9659&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.04&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.24&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.63&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8011&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.20&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.96&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.9.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7433&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.59&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.35&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.63&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6797&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.51&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.57&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.53&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.12.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6488&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.07&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.32&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.86&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.70.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6062&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.68&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.54&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.55&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.8.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4658&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.94&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.74&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2860&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.26&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.41&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.38&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2158&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.07&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.65&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1581&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;43.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;40.44&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/h2&gt;
&lt;p&gt;The test simulates multipart formdata processing and work with files.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5699&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.80&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.31&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.27&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.86.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4398&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.24&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.58&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.9.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3982&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.29&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.09&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3471&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.04&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.77&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.59&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.12.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2702&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.74&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.60&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.67&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2435&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.24&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.27&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.8.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2253&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.34&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.49&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.70.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2178&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.26&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;39.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.35&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2121&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.17&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1775&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.51&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.27&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.15&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1455&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;40.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;48.11&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;44.10&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;996&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;63.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;70.47&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;64.26&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;composite&quot;&gt;Composite stats&lt;/h2&gt;
&lt;p&gt;Combined benchmarks results&lt;/p&gt;

&lt;p&gt;Sorted by completed requests&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests completed&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.2.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;517515&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.51&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.33&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.94&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.86.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;466410&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.07&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.21&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;425130&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.5&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;359265&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.33&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.98&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.12.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;344040&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.24&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.72&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;320055&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.15&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.9.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;301485&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.22&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.13&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.71&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.70.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;267150&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.37&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.85&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.52&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.8.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;213045&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.76&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.0&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;124485&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.89&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.95&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;110340&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.95&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.16&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;66900&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;45.19&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;50.13&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;46.33&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content><author><name>Kirill Klenov</name></author><category term="results" /><summary type="html"></summary></entry><entry><title type="html">Results (2021-10-21)</title><link href="http://klen.github.io/py-frameworks-bench/results/2021/10/21/results.html" rel="alternate" type="text/html" title="Results (2021-10-21)" /><published>2021-10-21T00:00:00+00:00</published><updated>2021-10-21T00:00:00+00:00</updated><id>http://klen.github.io/py-frameworks-bench/results/2021/10/21/results</id><content type="html" xml:base="http://klen.github.io/py-frameworks-bench/results/2021/10/21/results.html">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js@3.2.1/dist/chart.min.js&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is a simple benchmark for python async frameworks. Almost all of the
frameworks are ASGI-compatible (aiohttp and tornado are exceptions on the
moment).&lt;/p&gt;

  &lt;p&gt;The objective of the benchmark is not testing deployment (like uvicorn vs
hypercorn and etc) or database (ORM, drivers) but instead test the frameworks
itself. The benchmark checks request parsing (body, headers, formdata,
queries), routing, responses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read more about the benchmark: &lt;a href=&quot;/py-frameworks-bench/about/&quot;&gt;The Methodic&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#composite&quot;&gt;Composite stats &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;canvas id=&quot;chart&quot; style=&quot;margin-bottom: 2em&quot;&gt;&lt;/canvas&gt;
&lt;script&gt;
    var ctx = document.getElementById('chart').getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ['blacksheep','muffin','falcon','starlette','baize','emmett','sanic','fastapi','aiohttp','tornado','quart','django',],
            datasets: [
                {
                    label: 'Single HTML response (req/s)',
                    data: ['18280','16016','14747','13481','12981','12580','9140','8547','7156','3217','3206','1744',],
                    backgroundColor: [
                        '#b9ddf1', '#afd6ed', '#a5cfe9', '#9bc7e4', '#92c0df', '#89b8da', '#80b0d5', '#79aacf', '#72a3c9', '#6a9bc3', '#6394be', '#5b8cb8', '#5485b2', '#4e7fac', '#4878a6', '#437a9f', '#3d6a98', '#376491', '#305d8a', '#2a5783',
                    ].reverse()
                },
                {
                    label: 'Work with JSON (req/s)',
                    data: ['10142','10083','9719','7781','7179','6803','6277','6229','4363','2668','2065','1422',],
                    backgroundColor: [
                        '#b3e0a6', '#a5db96', '#98d687', '#8ed07f', '#85ca77', '#7dc370', '#75bc69', '#6eb663', '#67af5c', '#61a956', '#59a253', '#519c51', '#49964f', '#428f4d', '#398949', '#308344', '#2b7c40', '#27763d', '#256f3d', '#24693d',
                    ].reverse()
                },
                {
                    label: 'Upload file (req/s)',
                    data: ['5479','4272','3905','3423','2472','2362','2143','2127','2034','1659','1354','934',],
                    backgroundColor: [
                        '#ffc685', '#fcbe75', '#f9b665', '#f7ae54', '#f5a645', '#f59c3c', '#f49234', '#f2882d', '#f07e27', '#ee7422', '#e96b20', '#e36420', '#db5e20', '#d25921', '#ca5422', '#c14f22', '#b84b23', '#af4623', '#a64122', '#9e3d22',
                    ].reverse()
                },
            ]
        }
    });
&lt;/script&gt;

&lt;h2 id=&quot;html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/h2&gt;

&lt;p&gt;The test simulates just a single HTML response.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18280&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.92&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.48&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.86.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16016&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.35&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.97&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14747&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.50&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.69&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.32&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.12&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13481&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.20&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.72&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12981&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.31&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.92&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12580&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.10&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.06&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.70.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9140&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.59&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.98&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.9.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8547&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.00&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.67&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.52&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7156&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.89&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.02&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.95&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3217&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.76&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.06&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.90&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3206&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.87&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.77&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.99&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.8&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1744&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.93&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;40.11&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.88&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/h2&gt;
&lt;p&gt;The test simulates a simple JSON REST API endpoint.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10142&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.02&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.45&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.27&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.86.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10083&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.09&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.41&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.32&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9719&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.27&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.55&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7781&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.54&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.12&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.19&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.9.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7179&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.09&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.94&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6803&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.33&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.42&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.59&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.12&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6277&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.18&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.70.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6229&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.00&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.90&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.25&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4363&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.65&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.93&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.67&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2668&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.78&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.01&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2065&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.38&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.05&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.8&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1422&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;43.04&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;49.50&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;44.96&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/h2&gt;
&lt;p&gt;The test simulates multipart formdata processing and work with files.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5479&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.67&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.86.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4272&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.22&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.39&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.08&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.9.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3905&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.39&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.69&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.46&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3423&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.81&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.80&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.12&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2472&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.25&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.88&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2362&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.67&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;37.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.17&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2143&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.76&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.87&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.70.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2127&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.19&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;39.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.08&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2034&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.36&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.46&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1659&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;37.33&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;40.91&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.58&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1354&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;44.27&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;49.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;47.31&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.8&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;934&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;66.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;75.72&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;68.45&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;composite&quot;&gt;Composite stats&lt;/h2&gt;
&lt;p&gt;Combined benchmarks results&lt;/p&gt;

&lt;p&gt;Sorted by completed requests&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests completed&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;508515&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.86&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.52&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.14&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.86.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;455565&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.89&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.32&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.46&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;418335&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.09&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.15&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.89&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;346860&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.73&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.3&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.43&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/baize/&quot;&gt;baize&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.12&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;333450&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.02&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.59&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;311055&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.57&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.92&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.65&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.9.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;294465&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.79&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.97&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.70.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;262440&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.93&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.77&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;204930&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.9&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.83&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;118785&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.97&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.12&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;103950&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.69&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.87&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.8&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;61500&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;48.31&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;55.11&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;50.1&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content><author><name>Kirill Klenov</name></author><category term="results" /><summary type="html"></summary></entry><entry><title type="html">Results (2021-09-01)</title><link href="http://klen.github.io/py-frameworks-bench/results/2021/09/01/results.html" rel="alternate" type="text/html" title="Results (2021-09-01)" /><published>2021-09-01T00:00:00+00:00</published><updated>2021-09-01T00:00:00+00:00</updated><id>http://klen.github.io/py-frameworks-bench/results/2021/09/01/results</id><content type="html" xml:base="http://klen.github.io/py-frameworks-bench/results/2021/09/01/results.html">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js@3.2.1/dist/chart.min.js&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is a simple benchmark for python async frameworks. Almost all of the
frameworks are ASGI-compatible (aiohttp and tornado are exceptions on the
moment).&lt;/p&gt;

  &lt;p&gt;The objective of the benchmark is not testing deployment (like uvicorn vs
hypercorn and etc) or database (ORM, drivers) but instead test the frameworks
itself. The benchmark checks request parsing (body, headers, formdata,
queries), routing, responses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read more about the benchmark: &lt;a href=&quot;/py-frameworks-bench/about/&quot;&gt;The Methodic&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#composite&quot;&gt;Composite stats &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;canvas id=&quot;chart&quot; style=&quot;margin-bottom: 2em&quot;&gt;&lt;/canvas&gt;
&lt;script&gt;
    var ctx = document.getElementById('chart').getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ['blacksheep','muffin','falcon','starlette','emmett','sanic','fastapi','aiohttp','tornado','quart','django',],
            datasets: [
                {
                    label: 'Single HTML response (req/s)',
                    data: ['18871','16612','15754','13725','13516','9709','8866','7457','3338','3310','1852',],
                    backgroundColor: [
                        '#b9ddf1', '#afd6ed', '#a5cfe9', '#9bc7e4', '#92c0df', '#89b8da', '#80b0d5', '#79aacf', '#72a3c9', '#6a9bc3', '#6394be', '#5b8cb8', '#5485b2', '#4e7fac', '#4878a6', '#437a9f', '#3d6a98', '#376491', '#305d8a', '#2a5783',
                    ].reverse()
                },
                {
                    label: 'Work with JSON (req/s)',
                    data: ['10385','10309','10212','7966','7432','7211','6260','4564','2783','2095','1566',],
                    backgroundColor: [
                        '#b3e0a6', '#a5db96', '#98d687', '#8ed07f', '#85ca77', '#7dc370', '#75bc69', '#6eb663', '#67af5c', '#61a956', '#59a253', '#519c51', '#49964f', '#428f4d', '#398949', '#308344', '#2b7c40', '#27763d', '#256f3d', '#24693d',
                    ].reverse()
                },
                {
                    label: 'Upload file (req/s)',
                    data: ['5871','4483','4143','3743','2432','2235','2224','2218','1806','1477','986',],
                    backgroundColor: [
                        '#ffc685', '#fcbe75', '#f9b665', '#f7ae54', '#f5a645', '#f59c3c', '#f49234', '#f2882d', '#f07e27', '#ee7422', '#e96b20', '#e36420', '#db5e20', '#d25921', '#ca5422', '#c14f22', '#b84b23', '#af4623', '#a64122', '#9e3d22',
                    ].reverse()
                },
            ]
        }
    });
&lt;/script&gt;

&lt;h2 id=&quot;html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/h2&gt;

&lt;p&gt;The test simulates just a single HTML response.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18871&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.31&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.36&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.84.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16612&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.93&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.81&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15754&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.07&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.02&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13725&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.22&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.63&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13516&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.10&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.70&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.68.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9709&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.86&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.56&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.6.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8866&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.06&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.42&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.22&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7457&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.84&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.58&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3338&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.26&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.15&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3310&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.15&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.80&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.33&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.6&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1852&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.37&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;37.97&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.65&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/h2&gt;
&lt;p&gt;The test simulates a simple JSON REST API endpoint.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10385&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.20&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.13&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10309&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.09&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.17&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.84.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10212&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.24&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.23&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7966&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.66&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.55&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.00&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.6.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7432&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.97&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.28&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.60&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7211&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.22&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.54&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.93&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.68.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6260&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.46&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.19&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4564&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.38&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.03&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2783&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.95&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.00&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2095&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.36&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.53&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.6&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1566&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;41.41&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;44.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;40.82&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/h2&gt;
&lt;p&gt;The test simulates multipart formdata processing and work with files.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5871&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.10&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.32&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.91&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.84.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4483&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.28&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.6.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4143&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.95&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.19&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.44&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3743&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.80&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.19&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2432&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.97&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.69&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.25&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2235&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.52&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.20&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.63&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2224&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.67&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.34&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.77&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.68.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2218&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.66&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.81&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1806&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.19&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.32&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.42&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1477&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;40.70&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;48.60&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;43.29&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.6&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;986&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;65.19&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;72.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;64.80&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;composite&quot;&gt;Composite stats&lt;/h2&gt;
&lt;p&gt;Combined benchmarks results&lt;/p&gt;

&lt;p&gt;Sorted by completed requests&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests completed&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;526905&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.78&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.89&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.84.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;469605&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.11&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;447090&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.32&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.13&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;361845&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.62&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.96&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.3.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;333060&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.36&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.97&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.6.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;306615&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.42&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.68.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;272805&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.66&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.19&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;213840&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.47&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.08&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;124755&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.59&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.26&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.7&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;108585&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.2&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.43&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.37&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.6&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;66060&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;46.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;51.67&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;46.76&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content><author><name>Kirill Klenov</name></author><category term="results" /><summary type="html"></summary></entry><entry><title type="html">Results (2021-08-02)</title><link href="http://klen.github.io/py-frameworks-bench/results/2021/08/02/results.html" rel="alternate" type="text/html" title="Results (2021-08-02)" /><published>2021-08-02T00:00:00+00:00</published><updated>2021-08-02T00:00:00+00:00</updated><id>http://klen.github.io/py-frameworks-bench/results/2021/08/02/results</id><content type="html" xml:base="http://klen.github.io/py-frameworks-bench/results/2021/08/02/results.html">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js@3.2.1/dist/chart.min.js&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is a simple benchmark for python async frameworks. Almost all of the
frameworks are ASGI-compatible (aiohttp and tornado are exceptions on the
moment).&lt;/p&gt;

  &lt;p&gt;The objective of the benchmark is not testing deployment (like uvicorn vs
hypercorn and etc) or database (ORM, drivers) but instead test the frameworks
itself. The benchmark checks request parsing (body, headers, formdata,
queries), routing, responses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read more about the benchmark: &lt;a href=&quot;/py-frameworks-bench/about/&quot;&gt;The Methodic&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#composite&quot;&gt;Composite stats &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;canvas id=&quot;chart&quot; style=&quot;margin-bottom: 2em&quot;&gt;&lt;/canvas&gt;
&lt;script&gt;
    var ctx = document.getElementById('chart').getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ['blacksheep','muffin','falcon','starlette','emmett','sanic','fastapi','aiohttp','tornado','quart','django',],
            datasets: [
                {
                    label: 'Single HTML response (req/s)',
                    data: ['19432','17250','16127','14000','13977','9929','9308','7815','3522','3422','1977',],
                    backgroundColor: [
                        '#b9ddf1', '#afd6ed', '#a5cfe9', '#9bc7e4', '#92c0df', '#89b8da', '#80b0d5', '#79aacf', '#72a3c9', '#6a9bc3', '#6394be', '#5b8cb8', '#5485b2', '#4e7fac', '#4878a6', '#437a9f', '#3d6a98', '#376491', '#305d8a', '#2a5783',
                    ].reverse()
                },
                {
                    label: 'Work with JSON (req/s)',
                    data: ['10836','10574','10470','8298','7850','7383','6441','4884','2919','2208','1656',],
                    backgroundColor: [
                        '#b3e0a6', '#a5db96', '#98d687', '#8ed07f', '#85ca77', '#7dc370', '#75bc69', '#6eb663', '#67af5c', '#61a956', '#59a253', '#519c51', '#49964f', '#428f4d', '#398949', '#308344', '#2b7c40', '#27763d', '#256f3d', '#24693d',
                    ].reverse()
                },
                {
                    label: 'Upload file (req/s)',
                    data: ['6118','4634','4434','3780','2593','2438','2275','2251','1864','1603','1047',],
                    backgroundColor: [
                        '#ffc685', '#fcbe75', '#f9b665', '#f7ae54', '#f5a645', '#f59c3c', '#f49234', '#f2882d', '#f07e27', '#ee7422', '#e96b20', '#e36420', '#db5e20', '#d25921', '#ca5422', '#c14f22', '#b84b23', '#af4623', '#a64122', '#9e3d22',
                    ].reverse()
                },
            ]
        }
    });
&lt;/script&gt;

&lt;h2 id=&quot;html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/h2&gt;

&lt;p&gt;The test simulates just a single HTML response.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19432&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.70&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.27&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.26&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.84.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17250&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.78&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.67&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16127&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.24&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.15&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.93&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14000&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.00&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.54&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13977&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.04&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.54&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.67.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9929&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.06&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.41&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.6.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9308&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.41&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.89&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7815&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.14&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.19&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3522&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.70&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.41&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.15&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3422&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.68&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.80&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.71&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1977&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.93&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.38&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/h2&gt;
&lt;p&gt;The test simulates a simple JSON REST API endpoint.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10836&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.67&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.84&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.87&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.84.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10574&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.66&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.10&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.02&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10470&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.76&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.11&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.08&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8298&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.92&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.28&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.68&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.6.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7850&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.67&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.16&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7383&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.53&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.44&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.76&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.67.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6441&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.59&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.31&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.90&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4884&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.11&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.26&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.10&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2919&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.07&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.93&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2208&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.09&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.97&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1656&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;39.50&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;42.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.60&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/h2&gt;
&lt;p&gt;The test simulates multipart formdata processing and work with files.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6118&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.20&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.45&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.84.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4634&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.89&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.78&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.6.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4434&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.37&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.44&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3780&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.30&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.46&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.01&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2593&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.15&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.15&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.64&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2438&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.37&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.25&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.67.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2275&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.18&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;37.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.09&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2251&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.38&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.43&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1864&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.31&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.31&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1603&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;45.73&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;39.90&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1047&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;60.93&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;67.76&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;61.00&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;composite&quot;&gt;Composite stats&lt;/h2&gt;
&lt;p&gt;Combined benchmarks results&lt;/p&gt;

&lt;p&gt;Sorted by completed requests&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests completed&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.9&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;545790&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.13&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.77&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.53&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.84.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;486870&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.59&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.82&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;455655&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.1&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.91&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.01&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.16.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;373365&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.29&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;344445&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.55&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.07&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.73&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.6.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;323880&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.0&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.83&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.67.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;279675&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.84&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;227055&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.95&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.85&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;128880&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.12&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.02&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;113910&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.2&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.84&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.14&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;70200&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;44.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;48.76&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;43.99&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content><author><name>Kirill Klenov</name></author><category term="results" /><summary type="html"></summary></entry><entry><title type="html">Results (2021-07-06)</title><link href="http://klen.github.io/py-frameworks-bench/results/2021/07/06/results.html" rel="alternate" type="text/html" title="Results (2021-07-06)" /><published>2021-07-06T00:00:00+00:00</published><updated>2021-07-06T00:00:00+00:00</updated><id>http://klen.github.io/py-frameworks-bench/results/2021/07/06/results</id><content type="html" xml:base="http://klen.github.io/py-frameworks-bench/results/2021/07/06/results.html">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js@3.2.1/dist/chart.min.js&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is a simple benchmark for python async frameworks. Almost all of the
frameworks are ASGI-compatible (aiohttp and tornado are exceptions on the
moment).&lt;/p&gt;

  &lt;p&gt;The objective of the benchmark is not testing deployment (like uvicorn vs
hypercorn and etc) or database (ORM, drivers) but instead test the frameworks
itself. The benchmark checks request parsing (body, headers, formdata,
queries), routing, responses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read more about the benchmark: &lt;a href=&quot;/py-frameworks-bench/about/&quot;&gt;The Methodic&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#composite&quot;&gt;Composite stats &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;canvas id=&quot;chart&quot; style=&quot;margin-bottom: 2em&quot;&gt;&lt;/canvas&gt;
&lt;script&gt;
    var ctx = document.getElementById('chart').getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ['blacksheep','muffin','falcon','starlette','emmett','sanic','fastapi','aiohttp','tornado','quart','django',],
            datasets: [
                {
                    label: 'Single HTML response (req/s)',
                    data: ['19405','19210','16180','15733','14041','11073','9266','7777','3534','3508','2130',],
                    backgroundColor: [
                        '#b9ddf1', '#afd6ed', '#a5cfe9', '#9bc7e4', '#92c0df', '#89b8da', '#80b0d5', '#79aacf', '#72a3c9', '#6a9bc3', '#6394be', '#5b8cb8', '#5485b2', '#4e7fac', '#4878a6', '#437a9f', '#3d6a98', '#376491', '#305d8a', '#2a5783',
                    ].reverse()
                },
                {
                    label: 'Work with JSON (req/s)',
                    data: ['10812','10635','10515','8248','8084','7758','6440','4690','2947','2159','1659',],
                    backgroundColor: [
                        '#b3e0a6', '#a5db96', '#98d687', '#8ed07f', '#85ca77', '#7dc370', '#75bc69', '#6eb663', '#67af5c', '#61a956', '#59a253', '#519c51', '#49964f', '#428f4d', '#398949', '#308344', '#2b7c40', '#27763d', '#256f3d', '#24693d',
                    ].reverse()
                },
                {
                    label: 'Upload file (req/s)',
                    data: ['6146','4722','4331','3854','2548','2377','2277','2263','1845','1663','1119',],
                    backgroundColor: [
                        '#ffc685', '#fcbe75', '#f9b665', '#f7ae54', '#f5a645', '#f59c3c', '#f49234', '#f2882d', '#f07e27', '#ee7422', '#e96b20', '#e36420', '#db5e20', '#d25921', '#ca5422', '#c14f22', '#b84b23', '#af4623', '#a64122', '#9e3d22',
                    ].reverse()
                },
            ]
        }
    });
&lt;/script&gt;

&lt;h2 id=&quot;html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/h2&gt;

&lt;p&gt;The test simulates just a single HTML response.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.83.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19405&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.78&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.04&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.26&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.8&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19210&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.76&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.31&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.30&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16180&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.20&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.92&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15733&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.70&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.15&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.03&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14041&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.10&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.53&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.66.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11073&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.88&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.32&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.74&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.6.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9266&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.30&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.04&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.92&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7777&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.30&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.23&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3534&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.11&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.11&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3508&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.57&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.23&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2130&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.95&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;30.07&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/h2&gt;
&lt;p&gt;The test simulates a simple JSON REST API endpoint.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.8&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10812&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.57&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.93&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.88&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.83.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10635&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.60&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.09&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.98&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10515&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.22&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.06&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8248&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.62&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.73&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8084&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.97&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.05&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.6.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7758&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.34&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.26&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.66.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6440&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.60&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.91&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4690&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.43&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.64&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2947&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.88&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.72&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2159&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.85&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.63&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1659&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;37.52&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;42.80&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.54&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/h2&gt;
&lt;p&gt;The test simulates multipart formdata processing and work with files.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.8&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6146&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.27&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.42&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.83.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4722&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.50&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.61&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.6.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4331&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.29&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.19&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.77&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3854&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.12&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.07&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.69&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2548&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.42&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.34&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.08&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2377&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.87&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.39&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.90&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.66.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2277&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.51&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.22&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.07&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2263&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.26&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.41&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.28&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1845&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.68&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.42&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.67&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1663&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.43&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;42.10&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.46&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1119&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;56.80&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;62.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;57.01&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;composite&quot;&gt;Composite stats&lt;/h2&gt;
&lt;p&gt;Combined benchmarks results&lt;/p&gt;

&lt;p&gt;Sorted by completed requests&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests completed&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.8&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;542520&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.11&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.84&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.53&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.83.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;521430&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.31&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.62&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;458235&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.0&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.89&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;397935&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.04&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.7&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.28&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;356820&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.33&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.43&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.01&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.6.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;320325&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.64&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.46&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.98&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.66.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;296850&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.07&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.57&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;222660&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.59&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.26&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;131160&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.69&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.7&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;112680&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.28&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.51&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.5&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;73620&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;41.38&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;46.13&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;41.87&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content><author><name>Kirill Klenov</name></author><category term="results" /><summary type="html"></summary></entry><entry><title type="html">Results (2021-06-22)</title><link href="http://klen.github.io/py-frameworks-bench/results/2021/06/22/results.html" rel="alternate" type="text/html" title="Results (2021-06-22)" /><published>2021-06-22T00:00:00+00:00</published><updated>2021-06-22T00:00:00+00:00</updated><id>http://klen.github.io/py-frameworks-bench/results/2021/06/22/results</id><content type="html" xml:base="http://klen.github.io/py-frameworks-bench/results/2021/06/22/results.html">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js@3.2.1/dist/chart.min.js&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is a simple benchmark for python async frameworks. Almost all of the
frameworks are ASGI-compatible (aiohttp and tornado are exceptions on the
moment).&lt;/p&gt;

  &lt;p&gt;The objective of the benchmark is not testing deployment (like uvicorn vs
hypercorn and etc) or database (ORM, drivers) but instead test the frameworks
itself. The benchmark checks request parsing (body, headers, formdata,
queries), routing, responses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read more about the benchmark: &lt;a href=&quot;/py-frameworks-bench/about/&quot;&gt;The Methodic&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#composite&quot;&gt;Composite stats &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;canvas id=&quot;chart&quot; style=&quot;margin-bottom: 2em&quot;&gt;&lt;/canvas&gt;
&lt;script&gt;
    var ctx = document.getElementById('chart').getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ['blacksheep','muffin','falcon','starlette','emmett','sanic','fastapi','aiohttp','tornado','quart','django',],
            datasets: [
                {
                    label: 'Single HTML response (req/s)',
                    data: ['17127','15098','14061','12342','12232','8726','8171','6886','2769','2727','1660',],
                    backgroundColor: [
                        '#b9ddf1', '#afd6ed', '#a5cfe9', '#9bc7e4', '#92c0df', '#89b8da', '#80b0d5', '#79aacf', '#72a3c9', '#6a9bc3', '#6394be', '#5b8cb8', '#5485b2', '#4e7fac', '#4878a6', '#437a9f', '#3d6a98', '#376491', '#305d8a', '#2a5783',
                    ].reverse()
                },
                {
                    label: 'Work with JSON (req/s)',
                    data: ['9280','9094','9002','7151','6871','6024','5550','4162','2445','1792','1407',],
                    backgroundColor: [
                        '#b3e0a6', '#a5db96', '#98d687', '#8ed07f', '#85ca77', '#7dc370', '#75bc69', '#6eb663', '#67af5c', '#61a956', '#59a253', '#519c51', '#49964f', '#428f4d', '#398949', '#308344', '#2b7c40', '#27763d', '#256f3d', '#24693d',
                    ].reverse()
                },
                {
                    label: 'Upload file (req/s)',
                    data: ['4932','3886','3649','3187','2148','2049','1915','1832','1483','1231','904',],
                    backgroundColor: [
                        '#ffc685', '#fcbe75', '#f9b665', '#f7ae54', '#f5a645', '#f59c3c', '#f49234', '#f2882d', '#f07e27', '#ee7422', '#e96b20', '#e36420', '#db5e20', '#d25921', '#ca5422', '#c14f22', '#b84b23', '#af4623', '#a64122', '#9e3d22',
                    ].reverse()
                },
            ]
        }
    });
&lt;/script&gt;

&lt;h2 id=&quot;html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/h2&gt;

&lt;p&gt;The test simulates just a single HTML response.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.8&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17127&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.79&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.69&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.80.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15098&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.52&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.20&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14061&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.67&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.95&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.51&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12342&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.82&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.15&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12232&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.47&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.79&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.19&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.65.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8726&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.82&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.76&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.29&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.3.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8171&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.36&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.22&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.84&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6886&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.30&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.50&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.29&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2769&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.02&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.88&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.12&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2727&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.78&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.00&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.47&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1660&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.65&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;42.10&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.57&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/h2&gt;
&lt;p&gt;The test simulates a simple JSON REST API endpoint.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.80.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9280&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.43&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.27&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.86&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.8&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9094&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.84&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.18&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.01&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9002&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.57&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.07&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7151&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.04&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.09&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.91&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.3.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6871&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.37&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.31&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6024&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.73&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.73&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.71&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.65.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5550&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.35&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.57&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.49&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4162&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.34&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.38&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2445&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.11&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.54&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.16&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1792&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.78&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.70&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1407&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;46.41&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;50.06&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;45.43&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/h2&gt;
&lt;p&gt;The test simulates multipart formdata processing and work with files.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.8&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4932&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.30&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.39&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.95&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.80.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3886&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.26&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.45&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.3.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3649&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;23.34&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.50&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3187&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.55&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.36&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.14&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2148&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.47&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.75&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2049&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.18&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.73&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.21&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.65.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1915&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.09&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;43.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.37&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1832&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.80&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.28&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.94&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1483&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;42.47&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;44.78&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;43.12&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1231&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;49.02&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;57.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;51.92&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;904&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;69.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;78.94&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;70.67&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;composite&quot;&gt;Composite stats&lt;/h2&gt;
&lt;p&gt;Combined benchmarks results&lt;/p&gt;

&lt;p&gt;Sorted by completed requests&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests completed&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.8&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;467295&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.46&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.45&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.88&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.80.0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;423960&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.25&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.35&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.17&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;393750&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.6&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.57&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;324615&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.3&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.3&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;292305&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.74&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.61&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.3.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;280365&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.25&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.31&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.55&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.65.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;242865&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.79&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.38&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;196455&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.95&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.63&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;105060&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.9&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.19&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;90660&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.44&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.98&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;59565&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;51.51&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;57.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;51.56&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content><author><name>Kirill Klenov</name></author><category term="results" /><summary type="html"></summary></entry><entry><title type="html">Results (2021-06-14)</title><link href="http://klen.github.io/py-frameworks-bench/results/2021/06/14/results.html" rel="alternate" type="text/html" title="Results (2021-06-14)" /><published>2021-06-14T00:00:00+00:00</published><updated>2021-06-14T00:00:00+00:00</updated><id>http://klen.github.io/py-frameworks-bench/results/2021/06/14/results</id><content type="html" xml:base="http://klen.github.io/py-frameworks-bench/results/2021/06/14/results.html">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js@3.2.1/dist/chart.min.js&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is a simple benchmark for python async frameworks. Almost all of the
frameworks are ASGI-compatible (aiohttp and tornado are exceptions on the
moment).&lt;/p&gt;

  &lt;p&gt;The objective of the benchmark is not testing deployment (like uvicorn vs
hypercorn and etc) or database (ORM, drivers) but instead test the frameworks
itself. The benchmark checks request parsing (body, headers, formdata,
queries), routing, responses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read more about the benchmark: &lt;a href=&quot;/py-frameworks-bench/about/&quot;&gt;The Methodic&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#composite&quot;&gt;Composite stats &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;canvas id=&quot;chart&quot; style=&quot;margin-bottom: 2em&quot;&gt;&lt;/canvas&gt;
&lt;script&gt;
    var ctx = document.getElementById('chart').getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ['blacksheep','muffin','falcon','starlette','emmett','sanic','fastapi','aiohttp','tornado','quart','django',],
            datasets: [
                {
                    label: 'Single HTML response (req/s)',
                    data: ['19097','17129','15966','14029','14026','10014','9330','7869','3520','3472','2036',],
                    backgroundColor: [
                        '#b9ddf1', '#afd6ed', '#a5cfe9', '#9bc7e4', '#92c0df', '#89b8da', '#80b0d5', '#79aacf', '#72a3c9', '#6a9bc3', '#6394be', '#5b8cb8', '#5485b2', '#4e7fac', '#4878a6', '#437a9f', '#3d6a98', '#376491', '#305d8a', '#2a5783',
                    ].reverse()
                },
                {
                    label: 'Work with JSON (req/s)',
                    data: ['10681','10645','10399','8209','7843','7456','6447','4854','2937','2223','1708',],
                    backgroundColor: [
                        '#b3e0a6', '#a5db96', '#98d687', '#8ed07f', '#85ca77', '#7dc370', '#75bc69', '#6eb663', '#67af5c', '#61a956', '#59a253', '#519c51', '#49964f', '#428f4d', '#398949', '#308344', '#2b7c40', '#27763d', '#256f3d', '#24693d',
                    ].reverse()
                },
                {
                    label: 'Upload file (req/s)',
                    data: ['6135','4672','4449','3825','2590','2468','2305','2294','1894','1627','1091',],
                    backgroundColor: [
                        '#ffc685', '#fcbe75', '#f9b665', '#f7ae54', '#f5a645', '#f59c3c', '#f49234', '#f2882d', '#f07e27', '#ee7422', '#e96b20', '#e36420', '#db5e20', '#d25921', '#ca5422', '#c14f22', '#b84b23', '#af4623', '#a64122', '#9e3d22',
                    ].reverse()
                },
            ]
        }
    });
&lt;/script&gt;

&lt;h2 id=&quot;html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/h2&gt;

&lt;p&gt;The test simulates just a single HTML response.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.7&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19097&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.76&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.32&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.31&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.79.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17129&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.85&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.70&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15966&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.28&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.22&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.97&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14029&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.72&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.53&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14026&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.64&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.53&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.65.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10014&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.04&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.41&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.36&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.3.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9330&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.29&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.97&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.86&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7869&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.25&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.13&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3520&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.88&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.52&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.16&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3472&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.42&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.57&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.43&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2036&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.48&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/h2&gt;
&lt;p&gt;The test simulates a simple JSON REST API endpoint.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.7&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10681&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.97&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.95&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.79.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10645&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.98&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10399&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.79&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.14&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8209&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.50&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.76&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.3.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7843&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.28&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.76&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.15&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7456&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.20&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.62&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.65.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6447&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.60&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.34&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.89&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4854&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.11&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.30&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.18&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2937&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.77&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.94&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.79&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2223&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.46&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.99&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.77&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1708&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;39.12&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;41.10&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;37.44&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/h2&gt;
&lt;p&gt;The test simulates multipart formdata processing and work with files.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.7&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6135&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.02&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.05&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.45&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.79.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4672&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.52&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.58&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.72&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.3.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4449&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.04&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.35&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.41&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3825&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.96&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.77&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2590&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.66&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.67&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2468&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.91&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.00&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;25.92&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.65.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2305&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.90&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.64&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.72&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2294&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.90&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.95&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.89&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1894&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.69&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.27&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;33.78&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1627&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;36.25&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;44.98&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;39.30&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1091&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;58.60&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;65.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;58.55&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;composite&quot;&gt;Composite stats&lt;/h2&gt;
&lt;p&gt;Combined benchmarks results&lt;/p&gt;

&lt;p&gt;Sorted by completed requests&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests completed&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.7&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;538695&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.14&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.78&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.57&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.79.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;486690&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.49&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;452850&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.8&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.96&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;372375&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.14&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.37&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.32&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;346680&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.53&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.48&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.3.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;324330&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.54&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.81&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.65.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;281490&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.18&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.46&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.66&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;227865&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.7&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.85&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.74&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;130545&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.7&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.82&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.7&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;114555&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.59&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;72525&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;43.07&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;47.07&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;42.49&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content><author><name>Kirill Klenov</name></author><category term="results" /><summary type="html"></summary></entry><entry><title type="html">Results (2021-06-07)</title><link href="http://klen.github.io/py-frameworks-bench/results/2021/06/07/results.html" rel="alternate" type="text/html" title="Results (2021-06-07)" /><published>2021-06-07T00:00:00+00:00</published><updated>2021-06-07T00:00:00+00:00</updated><id>http://klen.github.io/py-frameworks-bench/results/2021/06/07/results</id><content type="html" xml:base="http://klen.github.io/py-frameworks-bench/results/2021/06/07/results.html">&lt;script src=&quot;https://cdn.jsdelivr.net/npm/chart.js@3.2.1/dist/chart.min.js&quot;&gt;&lt;/script&gt;

&lt;blockquote&gt;
  &lt;p&gt;This is a simple benchmark for python async frameworks. Almost all of the
frameworks are ASGI-compatible (aiohttp and tornado are exceptions on the
moment).&lt;/p&gt;

  &lt;p&gt;The objective of the benchmark is not testing deployment (like uvicorn vs
hypercorn and etc) or database (ORM, drivers) but instead test the frameworks
itself. The benchmark checks request parsing (body, headers, formdata,
queries), routing, responses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read more about the benchmark: &lt;a href=&quot;/py-frameworks-bench/about/&quot;&gt;The Methodic&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;table-of-contents&quot;&gt;Table of contents&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#composite&quot;&gt;Composite stats &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;canvas id=&quot;chart&quot; style=&quot;margin-bottom: 2em&quot;&gt;&lt;/canvas&gt;
&lt;script&gt;
    var ctx = document.getElementById('chart').getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: ['blacksheep','muffin','falcon','starlette','emmett','sanic','fastapi','aiohttp','tornado','quart','django',],
            datasets: [
                {
                    label: 'Single HTML response (req/s)',
                    data: ['19619','17259','16225','14199','13994','10084','9210','7755','3510','3475','1969',],
                    backgroundColor: [
                        '#b9ddf1', '#afd6ed', '#a5cfe9', '#9bc7e4', '#92c0df', '#89b8da', '#80b0d5', '#79aacf', '#72a3c9', '#6a9bc3', '#6394be', '#5b8cb8', '#5485b2', '#4e7fac', '#4878a6', '#437a9f', '#3d6a98', '#376491', '#305d8a', '#2a5783',
                    ].reverse()
                },
                {
                    label: 'Upload file (req/s)',
                    data: ['6224','4711','4430','3858','2570','2436','2329','2305','1870','1586','1048',],
                    backgroundColor: [
                        '#ffc685', '#fcbe75', '#f9b665', '#f7ae54', '#f5a645', '#f59c3c', '#f49234', '#f2882d', '#f07e27', '#ee7422', '#e96b20', '#e36420', '#db5e20', '#d25921', '#ca5422', '#c14f22', '#b84b23', '#af4623', '#a64122', '#9e3d22',
                    ].reverse()
                },
                {
                    label: 'Work with JSON (req/s)',
                    data: ['11029','10567','10457','8279','7792','7313','6439','4880','2905','2180','1654',],
                    backgroundColor: [
                        '#b3e0a6', '#a5db96', '#98d687', '#8ed07f', '#85ca77', '#7dc370', '#75bc69', '#6eb663', '#67af5c', '#61a956', '#59a253', '#519c51', '#49964f', '#428f4d', '#398949', '#308344', '#2b7c40', '#27763d', '#256f3d', '#24693d',
                    ].reverse()
                },
            ]
        }
    });
&lt;/script&gt;

&lt;h2 id=&quot;html&quot;&gt;Accept a request and return HTML response with a custom dynamic header&lt;/h2&gt;

&lt;p&gt;The test simulates just a single HTML response.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.6&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19619&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.19&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.23&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.79.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17259&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.79&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.67&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16225&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.17&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.91&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14199&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.60&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.88&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.48&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13994&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3.66&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.02&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.54&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.65.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10084&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.91&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.41&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.31&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.3.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9210&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.38&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.12&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.97&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7755&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.20&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.26&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.25&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3510&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.14&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.33&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.23&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3475&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.85&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.43&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1969&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;31.32&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;35.95&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;32.52&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;upload&quot;&gt;Parse uploaded file, store it on disk and return a text response&lt;/h2&gt;
&lt;p&gt;The test simulates multipart formdata processing and work with files.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.6&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6224&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.84&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.26&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.79.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4711&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.48&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;18.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.56&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.3.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4430&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.03&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.65&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.53&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;3858&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.79&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.68&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2570&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.09&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;24.87&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2436&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.25&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.42&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;26.26&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.65.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2329&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;20.88&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;37.19&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.44&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2305&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.71&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.85&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.77&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1870&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.15&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.91&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;34.20&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1586&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;37.12&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;45.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;40.31&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1048&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;60.45&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;67.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;60.96&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;api&quot;&gt;Parse path params, query string, JSON body and return a json response&lt;/h2&gt;
&lt;p&gt;The test simulates a simple JSON REST API endpoint.&lt;/p&gt;

&lt;p&gt;Sorted by max req/s&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests/sec&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Latency Avg (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.6&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11029&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.47&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.77&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.79.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10567&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.67&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.08&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.02&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10457&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4.80&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.16&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.09&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8279&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.93&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.36&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.70&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.3.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7792&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.86&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.22&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7313&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.88&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.65.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6439&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.57&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.56&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.90&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;4880&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.04&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.27&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.11&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2905&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.23&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.03&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;2180&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.63&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;29.32&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;1654&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;39.47&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;42.65&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;38.67&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;composite&quot;&gt;Composite stats&lt;/h2&gt;
&lt;p&gt;Combined benchmarks results&lt;/p&gt;

&lt;p&gt;Sorted by completed requests&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Framework&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Requests completed&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 50% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency 75% (ms)&lt;/th&gt;
      &lt;th style=&quot;text-align: right&quot;&gt;Avg Latency (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/blacksheep/&quot;&gt;blacksheep&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1.0.6&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;553080&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;5.01&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.68&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.42&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/muffin/&quot;&gt;muffin&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.79.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;488055&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.06&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;10.54&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.75&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/falcon/&quot;&gt;falcon&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.0.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;458100&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;6.92&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.85&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;8.89&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/starlette/&quot;&gt;starlette&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.14.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;375720&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.54&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;16.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;12.35&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/emmett/&quot;&gt;emmett&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.2.2&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;343395&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.8&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;21.07&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;17.91&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/sanic/&quot;&gt;sanic&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;21.3.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;321480&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;7.55&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;13.21&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;9.91&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/fastapi/&quot;&gt;fastapi&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.65.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;282780&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;11.12&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;19.72&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;14.55&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/aiohttp/&quot;&gt;aiohttp&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.4.post0&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;226065&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.83&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.98&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;15.87&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/tornado/&quot;&gt;tornado&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;6.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;130800&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.62&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.8&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;22.68&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/quart/&quot;&gt;quart&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0.15.1&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;112875&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.33&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;28.13&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;27.32&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a href=&quot;https://pypi.org/project/django/&quot;&gt;django&lt;/a&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.2.4&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;70065&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;43.75&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;48.61&lt;/td&gt;
      &lt;td style=&quot;text-align: right&quot;&gt;44.05&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;</content><author><name>Kirill Klenov</name></author><category term="results" /><summary type="html"></summary></entry></feed>