>From the Flask documentation:

"For example Flask uses thread local objects internally so that you
don’t have to pass objects around from function to function within a
request in order to stay threadsafe. While this is a really easy
approach and saves you a lot of time, it also does not scale well to
large applications." (http://flask.pocoo.org/docs/foreword/#what-does-
micro-mean)

and

"Yes it is usually not such a bright idea to use thread locals. They
cause troubles for servers that are not based on the concept of
threads and make large applications harder to maintain. However Flask
is just not designed for large applications or asynchronous
servers." (http://flask.pocoo.org/docs/design/#thread-locals)

Admittedly, I don't understand the technical issues here, but are the
scalability issues associated with Flask's thread locals approach also
a problem for web2py? Just curious.


On Jun 10, 10:03 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
> Flask has a clever mechanism that web2py also uses internally in DAL.
> It partially addresses the problem:
>
> Consider this example:
>
> http://github.com/mitsuhiko/flask/blob/master/examples/flaskr/flaskr.py
>
> Consider the action "login". request is a global object that acts as a
> proxy. Any attribute of request gets mapped into the corresponding
> attribute of an object that exist only for the current thread. Yet you
> see that all code outside functions is executed only once when the web
> server starts and before any request arrives. All code that accesses
> the thread local proxies (request, session, etc) is in functions and
> they must be called explicitly.
>
> web2py allows to have code in models that is not in any function
> therefore you do not need to call it. We can think of it as app level
> global variables. This is the point I was making before.
>
> We use something similar to thread local vars inside the DAL since
> connection objects are thread locals. We just do not user a proxy
> class but an dictionary mapping between thread_id and connection
> objects.
>
> Anyway, the idea of thread local proxy is really nice and I will think
> if we can take advantage of it.
>
> Massimo
>
> On Jun 10, 7:03 pm, Thadeus Burgess <thade...@thadeusb.com> wrote:
>
>
>
> > > This code MUST be executed. There is no way to import it because
> > > request.client only exist when the request arrives and we do not want
> > > to re import modules on every request.
>
> > Flask accomplishes this perfectly by placing the request in a context
> > thread local. It only exists the the thread local when a request
> > actually arrives.
>
> > So from flask import request will fail if there is actually no request!
>
> > I am learning more about thread locals at the moment, but it seems
> > reasonable enough and it works.
>
> > --
> > Thadeus

Reply via email to