I have not  read everything carefully yet .I am doing a system monitor
ajax+web2py application , which monitor CPU and MEM at the same time and
updates the page with jquery ajax effects. its pretty simple.So it is
multi-threading in a webapp . to get response from multiple httprequest at
the same time can be done like this.

*NOTE:* for this System monitor to work,  Requires libstatgrab and
pystatgrab .

libstatgrab + pystatgrab works under Linux and Cygwin.

to

*in controllers , default.py :*

import statgrab

def index():
    return dict()


def cpumon():

    cpustat = statgrab.sg_get_cpu_percents()
    perc = int(round(100 - cpustat['idle']))
    return perc

def memon():

    #otno=random.randrange(0,100)
    memstat = statgrab.sg_get_mem_stats()
    memdiff = memstat['total'] - (memstat['cache'] + memstat['free'] )
    memfloat = float (memdiff) / float(memstat['total'])
    perc = int(round (memfloat * 100))
    return perc


in view . Index.html :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd";>
<html>
<head>
<title>Ajax + Web2py monitor</title>
<link rel="stylesheet" type="text/css" href="css/style.css"/>
<script type="text/javascript" src="js/jq.js"/>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="author" content="Your name here" />
<meta name="Copyright" content="Copyright (c) Your copyright here 2005" />

<script language="JavaScript1.8">
// You can put Functions i
</script>



<script language="JavaScript1.8">

    var clockid = 0;
    function updatecpu()
    {
        if(clockid)
        {
            clearTimeout(clockid);
            clockid = 0;
        }
        cpueffect();
        clockid = setTimeout('updatecpu()',2000);

    }

    function cpueffect() {

        $.post(('cpumon'),function(data)
        {
            if (data < 6){
                $("#amount").animate(
                {
                    width: 6 + "%"
                },1000);
                document.getElementById('amount').innerHTML=data + '%';

            } else {
                $("#amount").animate(
                {
                    width: data + "%"
                },1000);
                document.getElementById('amount').innerHTML=data + '%';
            }



        });

    }
    $(document).ready(updatecpu());
</script>

<script language="JavaScript1.8">

    var clockid2 = 0;
        function updatemem()
        {
            if(clockid2)
            {
                clearTimeout(clockid2);
                clockid2 = 0;
            }
            memeffect();
            clockid2 = setTimeout('updatemem()',2000);

        }

        function memeffect()
        {

            $.post(('memon'),function(data)
            {
                $("#mem").animate(
                {
                    width: data + "%"
                },1000);
                document.getElementById('mem').innerHTML=data + '%';

            });

        }
    $(document).ready(updatemem());
</script>

</head>
<body>

<h5><a href="#" onclick=blinds() >JxMon </a></h5>



<!-- ****************** BEGIN CPU Progress Bars ****************** -->

<h3><a href="#" onclick=blinds() >cpu: </a></h3>
<div class= "mon_cont" >
    <div class="cpumon_fill" id='amount'></div>
</div>

<h3><a href="#" onclick=blinds() >mem: </a></h3>
<div class= "mon_cont"  >
    <div class="memmon_fill" id='mem'></div>
</div>


</body>
</html>
On Mon, Oct 27, 2008 at 9:47 AM, achipa <[EMAIL PROTECTED]> wrote:

>
> Note that databases generally dislike multithreaded access, my patch
> won't help you with that. You can shift some the problem to the
> database if you're using multiple connections, but with SQLite you
> don't have that option (it's not 'lite' for no reason). The database
> adapter that boasts to be the best with that regard would be a
> postgresql + psycopg2 backend, but even that won't save you from logic
> errors and deadlocks - data consistency is tricky business in
> multithread land.
>
> On Oct 27, 4:50 am, tommy <[EMAIL PROTECTED]> wrote:
> > Archipa, when you use the different thread to access same SQLITE
> > database, do you have any problem? It looks like SQLITE database can
> > be only accessed by one thread. How do you walk around it?
> >
> > To all, thanks for your replies, I think my design has some issue.
> > Massimo's example code and Bill's suggestion made me think I need to
> > create another process in the background. Tito's suggestion is also
> > good. but I am so bad at Ajax.
> >
> > Tommy
> >
> > On Oct 26, 4:31 pm, achipa <[EMAIL PROTECTED]> wrote:
> >
> > > Actually, I made a patch that allows execution of code in a parallel
> > > thread after the page has been served. It can be scheduled (e.g.
> > > cron), or just launched in a fire and forget fashion without affecting
> > > the main app and the user (e.g. session cleaning, a long(er)
> > > conversion task, etc). It runs on all platforms and under both
> > > mod_wsgi and the stock cherrypy. I sent the patch to Massimo, but I
> > > have had no response so far, I don't know if he disapproves of the
> > > patch or simply did not have the time to review it. If there are brave
> > > souls willing to try it out, I can attach it here, too.
> >
> > > On Oct 26, 9:52 pm, billf <[EMAIL PROTECTED]> wrote:
> >
> > > > Assuming an event causes the data in the "other" application to
> change
> > > > wouldn't it be easier for the "other" application to post the changes
> > > > to your web2py app when the event occurs?   Having said that, I can
> > > > envisage a case where there are hundreds or thousands of updates per
> > > > couple of minutes and you only want a snapsot.
> >
> > > > Looking at Massimo's videotest app, that seems to use the approach of
> > > > starting a process outside of web2py.  If that is the case then that
> > > > process could execute a method after an interval that either:
> > > > a) sends your web2py app a request that causes it to retrieve the
> data
> > > > from the "other" application and update the web2py app database, or
> > > > b) the process gets the data and updates the web2py database directly
> > > > (unknown to your web2py app that just selects and gets the latest)
> >
> > > > To stop the external process your web2py app could write to the db or
> > > > a file that is checked by the external process each time it wakes up.
> >
> > > > Admittedly, none of the above explains how to create a background
> > > > process within web2py - maybe it is just not meant to be done by a
> > > > mere mortal.
> >
> > > > On Oct 26, 8:01 pm, tommy <[EMAIL PROTECTED]> wrote:
> >
> > > > > Massimo,
> >
> > > > > Here is my code,
> >
> > > > > I use GUI button to start my service (StartEngine, in the
> background,
> > > > > I want to retrieve the infomation from another application and save
> it
> > > > > in my database for every couple of munites.  after I starting my
> start
> > > > > engine service, I can go to other screen. and the background
> service
> > > > > keeps runing.
> >
> > > > > I can create the thread now, but got an error :SQLITE object
> created
> > > > > in a thread can only used  in that same thread.
> >
> > > > > def enginestart():
> > > > >     menu_setup()
> > > > >  #   engine.start()
> > > > >     session.starttimer=True
> >
> > > > >     symbols=db(db.symbols.id>0).select()
> >
> > > > >    # for symbol in symbols:
> > > > >    #     engine.addMarket(symbol.symbol_Name,
> > > > > symbol.description,symbol.tick)
> >
> > > > >     session.flash='engine stared'
> > > > >     session.enginestarted=True
> > > > >     db(db.historyprice.id >0).delete()
> > > > >  #   tt=threading.Timer(2, gethistoryprice(db))
> > > > >  #   tt.start()
> > > > >     t=Gethistoryprice()
> > > > >     t.start()
> > > > >     redirect(URL(r=request,c='engine',f='enginemaint'))
> > > > >     return dict()     session.starttimer=True
> >
> > > > >     symbols=db(db.symbols.id>0).select()
> >
> > > > >    # for symbol in symbols:
> > > > >    #     engine.addMarket(symbol.symbol_Name,
> > > > > symbol.description,symbol.tick)
> >
> > > > >     session.flash='engine stared'
> > > > >     session.enginestarted=True
> > > > >     db(db.historyprice.id >0).delete()
> > > > >     t=Gethistoryprice(db)
> > > > >     t.start()
> > > > >     redirect(URL(r=request,c='engine',f='enginemaint'))
> > > > >     return dict()
> >
> > > > > class  Gethistoryprice(threading.Thread):
> > > > >   def __init__(self, db):
> > > > >          threading.Thread.__init__(self)
> >
> > > > >          self.stopped=0
> > > > >          self.db=db
> >
> > > > >      def run(self):
> > > > >        while not self.stopped:
> > > > >           mysym=self.db(db.symbols.id>0).select()
> > > > >           for symbol in mysym:
> > > > >               #  p=engine.getlastprice(symbol)
> > > > >               p=random.randrange(10.00,60.00)
> > > > >               now=datetime.datetime.now()
> > > > >
> db.historyprice.insert(symbol_Name=symbol.symbol_Name,
> > > > > timestamp= now, price=p)
> >
> > > > >      def stop(self):
> > > > >          self.stopped=1
> >
> > > > > On Oct 26, 2:05 pm, mdipierro <[EMAIL PROTECTED]> wrote:
> >
> > > > > > This app does that. You upload a video and it is converted in
> > > > > > background (like at youtube) in a separate process (not a thread,
> a
> > > > > > process although the process my have threads). The visitor can
> later
> > > > > > check the conversion was completed. It includes documentation:
> >
> > > > > >http://mdp.cti.depaul.edu/appliances/default/show/38
> >
> > > > > > Massimo
> >
> > > > > > On Oct 26, 2:00 pm, Keith Edmunds <[EMAIL PROTECTED]> wrote:
> >
> > > > > > > On Sun, 26 Oct 2008 11:55:08 -0700 (PDT),
> [EMAIL PROTECTED]
> > > > > > > said:
> >
> > > > > > > > 1) what other background tasks do people envisage?
> >
> > > > > > > A regular display update via Ajax (but that could probably be
> demanded by
> > > > > > > the client rather than pushed)
> >
> > > > > > > > 2) how should you do it in web2py?
> >
> > > > > > > Pass.
> >
> > > > > > > --
> > > > > > > Keith Edmunds- Hide quoted text -
> >
> > > > > > - Show quoted text -- Hide quoted text -
> >
> > > - Show quoted text -
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to