John,
Tnx ... I'll keep this under my pillow ;-)

2010/8/24 John Heenan <johnmhee...@gmail.com>:
> Lee's 'The Problem with Threads' link is at
> http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf
>
> There is in Lee at http://ptolemy.eecs.berkeley.edu/%7Eeal/
>
> John Heenan
>
> On Aug 25, 5:00 am, John Heenan <johnmhee...@gmail.com> wrote:
>> Can't we at least have an acknowledgement that it is not necessary for
>> web2py to use a thread per request model and that web2py could instead
>> use an event model?
>>
>> WSGI can be viewed as an evil conspiracy to force Python web apps to
>> follow the Apache thread per request model! Also with Apace mod_wsgi,
>> Apache controls the Python process that web2py runs under! How evil
>> and ugly!
>>
>> There is no inherent reason why web2py needs to run a separate thread
>> for each NON static http request, if WSGI is not used!
>>
>> If web2py uses WSGI then a thread per request is forced upon web2py.
>> This suits Apache but not web serves with better event driven models
>> such as Lighttpd and Nginx
>>
>> For example Lighttpd does not even support WSGI. Instead web2py used
>> fastcgi for communication Lighttpd via a UNIX socket and web2py then
>> needlessly converts each request into a thread for handling by a WSGI
>> handler!
>>
>> Why should web2py be forced into using a thread model? Anyone who
>> writes PC applications avoids thread as if they are a plague. Even
>> academics openly call using threads evil. Here is an article by Edward
>> A. Lee professor at Berkely University with the title "The Problem
>> with Threads" (PDF).
>>
>> John Heenan
>>
>> On Aug 25, 1:00 am, John Heenan <johnmhee...@gmail.com> wrote:
>>
>> > There is absolutely no need to serve up static web pages of a pure
>> > Python web app or a WGSI app with a separate thread.  It is
>> > inefficient to use an inbuilt web server (of a Python web app) or
>> > Apache (if WGSI used) to serve up static web pages using separate
>> > threads. Both Lighttpd and Nginx are well known web servers that
>> > thrash Apache in objective tests for static pages when a web server is
>> > under load. These web servers use event handlers to serve static web
>> > pages, not necessarily separate threads.
>>
>> > Of course the question remains, how much can the performance of WSGI
>> > type apps be improved by an analogous event handling model within the
>> > app and how much of a change in development style would be required to
>> > take full advantage of such an approach. As far as I am aware these
>> > questions has never even been posed.
>>
>> > Further background:
>>
>> > There is no need to use web2py to serve up its css pages, javascript
>> > and images.  A compiled static language (such as C) web server can be
>> > used instead.
>>
>> > The question then becomes which web server. The answer is obvious: web
>> > servers that use event handlers to serve static web pages, not
>> > necessarily threads. Unfortunately you will find religious bigots,
>> > even on this forum, who will ridicule anyone who points out the
>> > obvious. Expect abuse from this reply.
>>
>> > John Heenan
>>
>> > On Aug 24, 3:21 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>>
>> > > P.S. In the end the bottle neck is ALWAYS database access.
>>
>> > > On Aug 24, 12:20 am, mdipierro <mdipie...@cs.depaul.edu> wrote:
>>
>> > > > In Java a serverlet, as far as I understand, is a class which conforms
>> > > > to some API that allows it to serve one http request. Each instance is
>> > > > executed in its own thread. The Python equivalent of the serverlet API
>> > > > is a WSGI application and web2py is based on WSGI, therefore the
>> > > > parallelization mechanism is equivalent to Java serverlets.
>>
>> > > > In web2py (the same in Django, Pylons, any any WSGI app) each http
>> > > > request is executed in its own thread. Threads are recycled to server
>> > > > non-concurrent requests and reuse database connections (pooling)
>> > > > without need to close and reopen them. The web server can be
>> > > > configured for a min number and a max number of threads.
>>
>> > > > I think the GIL in this context is a false problem. In fact in
>> > > > production you can use Apache and run as many processes as the number
>> > > > of cores that you have. Each process will create as many threads as it
>> > > > needs to server multiple requests. The GIL is a problems only if one
>> > > > process runs multiple threads on multiple cores. It is possible there
>> > > > are some caveats with many cores but I have not really played with
>> > > > apache configurations and benchmarks.
>>
>> > > > I do not think using Jython helps anything. According to these tests:
>> > > >  http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-p...
>> > > >  http://pyevolve.sourceforge.net/wordpress/?p=1189
>> > > > Jython is 2x-3x slower than cpython. So you may get better scaling
>> > > > with multiple cores but you pay huge perfomance hit.
>>
>> > > > Web2py runs on Jython but there is a known bug in Java regular
>> > > > expressions that Sun marked as "won'tfix" that can cause runaway
>> > > > problems when parsing complex templates. This is not a web2py specific
>> > > > problem but we have seen effects of the bug in some web2py apps.
>>
>> > > > Massimo
>>
>> > > > On Aug 23, 11:29 pm, pierreth <pierre.thibau...@gmail.com> wrote:
>>
>> > > > > Hello,
>>
>> > > > > I would like to know how Web2py is managing threads. Is it like Java
>> > > > > servlets where requests are mapped to servlets while one servlet
>> > > > > object can be used by multiple threads at the same time to serve many
>> > > > > requests?
>>
>> > > > > Are some users here using Jython with Web2py to get around the ugly
>> > > > > Pyhton GIL? I would to know about your experience.
>>
>> > > > > ------------------
>> > > > > Pierre

Reply via email to