<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/3.0.9">
</HEAD>
<BODY>
This is best handled outside of mod_python, by apache.&nbsp; Take a look at mod_bandwidth and mod_throttle, which should get you going the in right direction.&nbsp; I think people often overlook apache and it's other modules which can be used with mod_python, and many times are already installed and just need to be configured.<BR>
<BR>
Mike<BR>
<BR>
On Thu, 2004-05-13 at 14:16, SAiello@Jentoo.com wrote:
<BLOCKQUOTE TYPE=CITE>
<PRE><FONT COLOR="#0000ff"><I>Hello All,

I was curious for ideas on how to protect a mod_python web application from 
someone submitting/requesting data very quickly repeatedly. An example, I am 
building an IMAP webmail application. Currently, if I click the view 'next 
set of messages in email box' quickly over and over again, that seems to 
spawn a bunch of apaches trying to service all those requests. One problem is 
that I really don't want one user being able to make my app take up alot of 
CPU load by doing this. Another is that I am storing the current message 
position in a session variable, by spawning a bunch of simultaneous requests 
I seem to be able to keep clicking 'next' above the total number of messages.

A quick idea of mine to limit one simultaneous request per session, was at the 
start of the request, create a session variable that would store the total 
number of requests for that session. Then I could check the number of 
requests, and if the variable is greater than 1, sleep until it is lower than 
1.

from mod_python import psp
from mod_python import apache
from mod_python import Session

cookieSecret=&quot;CisForCookieThatsGoodEnoughForMe&quot;

def test1(req, **args):
        from mod_python import util
        from time import strftime, gmtime, time, sleep
        sess=Session.Session(req, None, cookieSecret)
        if not sess.has_key('REQUESTS'):
                sess['REQUESTS']=1
                sess.save()
        else:
                sess['REQUESTS']+=1
                sess.save()
                while sess['REQUESTS']&gt;1:
                        sleep(1)

&lt;Rest of code&gt;

        sess['REQUESTS']-=1
        sess.save()
        return

Not sure is this is the best/cleanest method. Any Ideas, thoughts, 
suggestions ?

Thanks,
  Steven 
_______________________________________________
Mod_python mailing list
Mod_python@modpython.org
<A HREF="http://mailman.modpython.org/mailman/listinfo/mod_python"><U>http://mailman.modpython.org/mailman/listinfo/mod_python</U></I></A></PRE>
</BLOCKQUOTE>
</BODY>
</HTML>