On Sat, Mar 3, 2012 at 5:54 AM, Massimo Di Pierro
<[email protected]> wrote:
> Not sure I understand the issue but you should not have time.sleep in code.
> It causes the threads to live longer then necessary and make you vulnerable
> to DoS attacks.

Of course, sleep is more like a simple hack. If the app is for internal use with
few users that might be worth it.

> If you need to do something computationally expensive you need to use the
> scheduler and perform the tack using a background process.

The ideal solution.
CPU intensive task should not be handled within requests.


> Anyway, one slow request should not slow down other requests unless:
> 1) the other request are performed by the same user (in this case the
> session is locked unless you session._unlock(response))
> 2) the slow process keeps the database locked (you can unlock it by adding
> db.commit() after each db insert/delete/update)

3) If using a python webserver that runs in one process,
even with multiple threads, if there is a CPU intensive task and
GIL is not released, other threads may not be able to run.

for example put this in a controller, unrealistic code:

import time
def index():
    n = 1000000000
    while n > 0:
        #time.sleep(0.001)
        i = range(1000000)
        n -= 1
    return "Teste"

Suppose the app is named test, run the function, http://localhost:8000/test
then try to access the welcome app, http://localhost:8000/welcome/default/index
The welcome will be served, but after a long time.

If we comment the i = range(1000000) line, than welcome will be served
more quickly.
Why? It's still a heavy CPU task.
I suppose that it is due to python ticks (import sys;sys.getcheckinterval()).
The range line will slow down the tick count.

For more detailed explanation see:
http://www.dabeaz.com/python/UnderstandingGIL.pdf

I'm not 100% sure about this stuff, so if something is not correct,
or you can improve on this subject, please do.

Note, these tests were done with rocket server,
that use one process with several threads.

I found an interesting explanation about webservers:
http://stackoverflow.com/a/3491931

Ricardo

Reply via email to