
Falcon is a high-performance Python Web framework - areski
http://falconframework.org/
======
jaytaylor
If performance is that important for your use-case, why are you using python?
Wouldn't it be better to use an appropriate tool more suitable for your needs?

Is the performance difference between Django+TastyPie, Flask, or Falcon really
going to be the bottleneck holding you back from achieving greatness? If
so..then maybe it's better to consider a different tool set.

Any number of other high-performance solutions fit the bill: Go, Java JAXRS,
etc..

After having spent over a decade in Python-land myself, I've learned that a
Framework's ease-of-use by developers is _vastly_ more important than any
micro-benchmark performance.

When I evaluated Falcon for it's usability in mid-2014 I found it painful when
compared to Flask or Bottle.

\--

But if benchmarks are your thing, for laughs, I've found some which compare Go
/ Python / Java etc (hey, at least they are data-driven :) :

[https://www.techempower.com/benchmarks/](https://www.techempower.com/benchmarks/)
\- here "Falcon" scores below Go, Java, and PHP frameworks.

[http://ziutek.github.io/web_bench/](http://ziutek.github.io/web_bench/)

[https://medium.com/@tschundeee/express-vs-flask-vs-go-
acc087...](https://medium.com/@tschundeee/express-vs-flask-vs-go-acc0879c2122)

~~~
calpaterson
Yeah the web tier is rarely the bottleneck, can be scaled linearly when it is
and typically very susceptible to caching.

I didn't like the presentation of the benchmark either. There isn't enough
information to know even what the configuration is (uWSGI or gunicorn? it
doesn't say) let alone to replicate the benchmark on your own hardware. It's
disappointing that the author doesn't include proper stats like standard dev,
nth percentile, etc which would give better impression of what's going on. On
top of all of that, it's a microbenchmark that doesn't include the typical db
access, caching and so on of a real web application, so it gives a misleading
impression of the speedup you could get over another framework.

~~~
voidlogic
>Yeah the web tier is rarely the bottleneck,

People say this all the time- While I think it is mostly true, I think it is
more often untrue then most would assume. In well optimized systems the "IO
layer" is optimized first as it rightly should be, at this point improving the
single-threaded performance and concurrency/parallelism start to really
matter.

>can be scaled linearly

Sure but scaling my number of servers linearly however doesn't imply linear
maintenance/operations effort... If I can run a order of magnitude less
severs, I am going to save money. Its all about figuring out if the savings
are worth shift to a higher performance platform... but playing devils
advocate if one had started with the higher performance platform to begin
with...

>when it is and typically very susceptible to caching.

That is making a lot of assumptions about the problem space at hand. But its
fair point, when things are catchable, its magical.

~~~
spullara
Twitter got a 10x reduction in number of front-end web servers and a 10x
latency improvement by changing the platform. The layer literally called
thrift services and made HTML pages. The 10x reduction in servers was great at
the scale that they were at but the 10x decrease in latency was the real
winner and it had nothing to do with scale. Pure single request performance.

~~~
ddorian43
they probably also rewrote the code (they just didn't change the language)
right ?

~~~
grobinson
I think you're asking whether they optimized the rewrite, rather than just
ported it from Ruby to Scala? I too would be interested to know if there is
any data to this.

~~~
ddorian43
That's what happens most of the time.

~~~
spullara
It was an exact port including bugs — output needed to be exactly the same as
that was the best way to test the result. I wouldn't say the Scala code was
any more optimized than the Ruby code was over the years. In fact, lots more
effort had been put against optimizing the Ruby side (for example, the
template engine was written in C for performance).

------
julenx
The website is saying how good the framework is but I really miss seeing right
on the homepage how code written using this framework looks like. Flask's
website is really good at this, for instance.

~~~
Nagyman
Agreed; their README is better which includes sample code:

[https://github.com/racker/falcon/blob/master/README.md](https://github.com/racker/falcon/blob/master/README.md)

------
agounaris
I'm just wondering if the name is already taken :P slightly different but
still same sound

[http://www.phalconphp.com/en/](http://www.phalconphp.com/en/)

~~~
iopq
They both claim to be high performance web frameworks and both have the name
(ph|f)alcon. Is this on purpose?

~~~
sanswork
Falcons are very fast birds.

------
thezilch
What about when I have auth or any number of middleware and am hitting a
cached-object store; do the performance gains continue to stand out? With just
a few dict and string operations, their tests showed performance dropped
considerably. I'm going to be doing more than that in each request; I'm not
going to use this to use Python to serve anything but dynamic content.

Would be nice to see them on
[https://www.techempower.com/benchmarks/#section=data-r9&hw=p...](https://www.techempower.com/benchmarks/#section=data-r9&hw=peak&test=db&l=1kw)

------
richardolsson
I've recently started using Falcon, and also contributed some code to it (e.g.
an even faster router which generates and compiles python code representing
the URI tree).

The main benefit for me, and the reason why I chose Falcon over other
frameworks, is that Falcon is entirely designed around the task of creating
REST APIs. You wouldn't use it to create a blog or news site or whatever. You
would perhaps use it to create an API backend for any of those though.

This makes it light-weight, and also opens the possibility for some design
decisions that would not work in a more general purpose type of framework.

In that regard, Falcon is definitely more opinionated than other frameworks
(it's opinion being that you should build REST APIs), but in others, such as
choice of response encoder, storage et c, it's not.

------
mangeletti
Performance is always a factor for me, until IBM finishes that new line of
$1.00 servers that don't use electricity and are the size of an atom... in the
meantime, we can continue to learn from highly performant libraries and
frameworks like this.

------
andrewstuart
The value of Falcon for me is less its performance and more that it it for
building REST APIs and does not carry the legacy of trying to support creation
of Html front ends, along with all the associated complexity and cruft and
dilution.

------
bliti
I welcome any effort that aims to improve performance and the python Web
ecosystem. From the code in the tutorials Falcon feels a little un-pythonic.
This is not a criticism. But a comparison from my experience with other python
frameworks (mainly django and flask). It is unfair to compare mature
frameworks with a new one. Though this one feels a bit java-ish. Good? Bad? To
me that's good. It's stepping out of the comfort zone a bit. Rather than read
purely like the idioms of the language, it seems to aim to read like the
process it defines. Something that other frameworks abstract down their own
idioms.

------
Patrick_Devine
I recently used Falcon to hack together a quick email backend for an ajax
comments form, and found it really useful. It's super lightweight and was
relatively easy to get working with uwsgi/nginx.

I've used Django and Pecan in the past, and both are much more full featured
(Django by a couple orders of magnitude), so it's not really clear to me which
I'd use for a large project. For something quick and dirty, Falcon seems like
a reasonable bet.

------
japhyr
Can someone compare this to Django/ Flask? Would building a project with
Falcon be similar to building a project with Flask?

This looks interesting, but I'm not well versed at evaluating a new web
framework. I've built a few projects in Django, and I have a basic
understanding of how I'd go about building a project in Flask. I've never
worked on a high-traffic project.

~~~
simonpantzare
Django is much larger with its ORM, template system, admin site, and so on.

Feature-wise it seems close to Flask. I suspect that Flask is more opinionated
than Falcon: it requires the Jinja2 template library and your project may end
up with a tight coupling with Flask if you use its blueprint system or don't
think through how you use Flask's context variables flask.request and flask.g
(Flask tries to be too clever here IMO).

Falcon looks more like a library than a framework to me and its design seems
less likely to affect how you structure projects compared to Django in
particular but also Flask.

~~~
ascotan
Flask likely requires Jinja2 because they're both made by the same team.
[http://www.pocoo.org/team/#armin-ronacher](http://www.pocoo.org/team/#armin-
ronacher)

------
fastball
I normally use bottle and this isn't much of a step of from that, it would
seem.

The more important takeaway seems to be that if you use flask, you should
probably be using bottlepy instead, as my experience with both indicates that
they are otherwise functionally the same.

~~~
RussianCow
Flask has a much larger pool of community extensions, and in general has more
community support and more "batteries included" than Bottle. In my opinion,
there is no real reason to use Bottle anymore.

~~~
bpicolo
Community extensions are exactly what I dislike about Flask. I want
extensibility without custom extensions. I want the framework to be out of the
way entirely when I choose additional packages to work with.

~~~
detaro
then don't use the extensions? Not trying to be snarky, I might be missing
something, but does Flask actually make it harder to use additional packages?

~~~
corford
Nope. You can use whatever packages you like. Those you've rolled yourself,
standard python packages like psycopg2, redis-py etc., Flask community
provided packages and anything in between.

I'm building a fairly large webapp in Flask and rarely, if at all, use any
Flask packages other than the core itself.

------
egeozcan
One would think that there's too much competition and enough maturity among
Python web frameworks to see such speed gains.

------
hmans
A framework, by definition, must be opinionated. A framework without opinions
is just a library.

------
ivoras
Wow, is Python3 still that much slower than Python2?

~~~
agentultra
iirc, Python 3.4 saw a strong leap in performance largely related to unicode.
Could be wrong but the earlier versions of Python 3 did suffer some slow down.

~~~
cbsmith
It also helps that Python2 based web frameworks play a bit fast & loose with
the odd ambiguities in the HTTP protocol that Python3 won't let you get away
with.

------
spooneybarger
120 req/s is considered fast?

~~~
rdtsc
From the linked page under Benefits/Performance section:

\---

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.

\---

Looking at a sibling post it seems like you are just not aware that in many
countries , is the decimal separator.

~~~
detaro
You probably mean "is not the decimal separator", because he interpreted it as
such.

------
amelius
High performance, makes me wonder how it deals with the GIL (global
interpreter lock).

~~~
mrits
That's not really a problem with serving web requests. Usually there isn't a
downside to multiprocessing these. I don't know anything about this framework
but I assume it is using some sort of non-blocking IO which works just about
as well as OS threads for web servers. Look at something like Gevent if you
are interested in this.

~~~
amelius
The problem is that sometimes you _do_ need to do some heavy processing while
servicing a request, and then you're blocking all other users.

Event-driven processing is much like cooperative multitasking from the Windows
3.1 days. It only works well if every part of the machinery behaves properly
and predictively.

------
pjmlp
Performance and Python on the same sentence?!?

