Fork me on GitHub
Read the Docs

Design

Falcon is a *truly* fast, light Python WSGI framework.

Light. Only the essentials are included, with six and mimeparse the only dependencies beyond the standard library. We work to keep the code lean, making Falcon easier to test, optimize, and deploy.

Fast. Cloud APIs need to turn around requests quickly, and make efficient use of hardware. Falcon processes requests several times faster than other popular web frameworks.

Flexible. Falcon can be deployed in a variety of ways, depending on your needs. The framework speaks WSGI, and works great with Python 2.6 and 2.7, PyPy, and Python 3.3. There's no tight coupling with any async framework, leaving you free to mix-and-match what you need for your web service.

Try the Falcon Web Framework and then check out these Talons.


Benefits

Performance. Unlike other Python web frameworks, Falcon won't bottleneck your API's performance under highly concurrent workloads. Many frameworks max out at serving simple "hello world" requests at a few thousand req/sec, while Falcon can easily serve many more on the same hardware.

Freedom. Falcon isn't very opinionated. In other words, the framework leaves a lot of decisions and implementation details to you, the API developer, which means you will need to use your head a little more than other web frameworks, and probably write a little more code. On the other hand, this gives you a lot of freedom to customize and tune your implementation in order to create a solution that stands out from the crowd.

Reliability. Falcon doesn't include a lot of cruft that is simply unnecessary when building web services. Less code and fewer dependencies means a smaller attack surface, lower memory usage, and fewer places for bugs to hide. Our build fails at anything less than 100% code coverage. We use Travis and Coveralls to keep ourselves honest.

If you're still not convinced, check out this bunny with a pancake on its head.


Benchmarks

Scenario. The benchmark acts as a WSGI server and performs a GET request directly on each framework's app. Each app parses a route template with a single embedded parameter, reads a query parameter and a header from the request data, sets an x-header on the response, and finally returns a 10 KiB plain-text body, randomly generated.

Method. 200,000 iterations were executed per trial, and the best time was recorded for each framework over 20 trials. The order in which the frameworks were tested was randomized for each trial. Also, garbage collection was enabled as it would be in a production environment, and a full collection was forcefully triggered before each trial. Finally, results were calculated using the Decimal class, and rounded to the nearest whole number.

Platform. Benchmarks were executed on a Rackspace Cloud Server (1 GB Performance), running Arch 2013.9 with all system packages updated to their latest versions as of 16 Jan 2014.

Python 2.7.6

Framework req/sec μs/req Performance
Falcon (0.1.8) 24,358 41 8x
Bottle (0.11.6) 13,623 73 4x
Pecan (0.4.4) 6,604 151 2x
Werkzeug (0.9.4) 5,163 194 2x
Flask (0.10.1) 3,041 329 1x

Python 3.3.3

Framework req/sec μs/req Performance
Falcon (0.1.8) 18,857 53 7x
Bottle (0.11.6) 10,788 93 4x
Werkzeug (0.9.4) 4,704 213 2x
Pecan (0.4.4) 4,631 216 2x
Flask (0.10.1) 2,842 352 1x

PyPy 2.2.1

Framework req/sec μs/req Performance
Falcon (0.1.8) 120,703 8 13x
Bottle (0.11.6) 105,933 9 11x
Pecan (0.4.4) 73,793 14 8x
Werkzeug (0.9.4) 40,841 24 4x
Flask (0.10.1) 9,391 106 1x

 

Extended Test. Falcon was also benchmarked under Python 2.7.6 with a more realistic scenario, in which the routing table had multiple entries, the query string contained percent-encoded characters, and several complex response headers were set in the response. Note that even when Falcon is doing more work, it still is able to outperform other frameworks, such as Bottle, which are only doing the bare minimum to construct a response.

Framework Test req/sec μs/req Performance
Falcon (0.1.8) Extended 17,787 56 6x
Bottle (0.11.6) Simple 13,623 73 4x
Pecan (0.4.4) Simple 6,604 151 2x