The slowdown problem might be caused by many database requests
required to save the session on every 1000kb of data. To be sure you
may try to set db.printing=True after creating web.database, running
web.py under integrated dev server and checking console output.

I usually end my code.py with something like this:

if __name__ == "__main__":
    sys.argv.append('55650')
    app.run()
else:
    application = app.wsgifunc()

It allows me to run "python code.py" (will run web.py using integrated
dev server on port 55650) and it will also work when I point mod_wsgi
to it.








On Feb 9, 8:08 pm, Oetzi <[email protected]> wrote:
> Here is the server side:
>
> #!/usr/local/bin/python2.4
> import cgitb; cgitb.enable()
> import sys
> import web, os, random, time
>
> def cgidebugerror():
>
>         _wrappedstdout = sys.stdout
>
>         sys.stdout = web._oldstdout
>         cgitb.handler()
>
>         sys.stdout = _wrappedstdout
>
> web.internalerror = cgidebugerror
>
> urls = ('/', 'upload',
>                 '/progress+', 'progress',
>                 '/file+', 'fileServe',
>                 '/admin', 'admin')
>
> web.config.debug = False
>
> db = web.database(dbn='postgres', user='oetzi', pw='6a5f5f70',
> db='oetzi')
> store = web.session.DBStore(db, 'session_data')
> sessiond = {'progress': 0, 'finished' : False, 'title' : "", 'path' :
> ""}
> app = web.application(urls, globals(), autoreload=False)
> session = web.session.Session(app, store, initializer=sessiond)
> render = web.template.render('/home/oetzi/webapps/mlb/htdocs/
> templates/')
>
> class fileServe:
>
>         def GET(self):
>
>                 arg = web.input(arg=None)
>                 keys = {}
>                 keys['key'] = arg.key
>                 path = db.select('files', keys, what='path', where='key=$key')
>
>                 #if not path:
>
>                 #       return "This file doesn't seem to exist..."
>
>                 try:
>
>                         download = open(path[0].path, 'r')
>
>                 except IndexError:
>
>                         return "This file doesn't seem to exist..."
>
>                 web.header('Content-type', 'application/file')
>                 return download.read()
>
> class upload:
>
>         paths = {}
>
>         def GET(self):
>
>         #render html file
>                 return render.index(0)
>
>         def POST(self):
>
>                 #upload file from form
>                 submit = web.input(myfile={})
>
>                 code = submit.code
>                 fileU = submit.myfile
>
>                 filepath = fileU.filename.replace('\\','/')
>                 name = filepath.split('/')[-1]
>                 path = '/home/oetzi/webapps/mlb/htdocs/files/' + name
>                 upload.paths[code] = "/mlb.py/file?key=" + name
>
>                 out = open(path, 'wb', 1000)
>
>                 c = 0
>
>                 while (True):
>
>                         packet = fileU.file.read(1000)
>
>                         if not packet:
>
>                                 break
>
>                         else:
>
>                                 out.write(packet)
>                                 c += 1
>
>                         if (c % 5 == 0):
>
>                                 session.progress += c
>                                 session._save()
>
>                 out.close()
>
>                 session.progress = -1
>                 session._save()
>                 #block until client has been updated
>                 while not session.finished:
>
>                         pass
>
>                 #commit to db
>                 title = session.title
>                 db.insert('files', key=name, title=title, path=path)
>
>                 #clean up
>                 session.kill()
>                 path = "http://oetzi.webfactional.com"; + 
> upload.paths.pop(code)
>
>                 return title + ": " + path
>
> class progress:
>
>         def GET(self):
>
>                 #take in current title and status for user with code and 
> return
> progress
>                 arg = web.input(arg=None)
>                 code = arg.code
>
>                 if int(arg.status) > 0:
>
>                         session.title = arg.title
>                         path = session.path
>                         session.finished = True
>                         return path
>
>                 x = session.progress
>                 return x
>
>         def POST(self):
>
>                 pass
>
> application = app.wsgifunc()
>
> Basically my when I upload it just does a standard html form upload
> but my you'll see from my urls that that maps to upload.POST(). While
> this is happening (as I send the form upload result to an iframe) I
> send a progress.GET every 2 seconds from my javascript. Ignore the
> references to 'code' - its just the old way I did sessions.
> The problem seems to be that the gets take about 10 or 20 seconds to
> return so the upload progress is so far behind it doesn't seem to do
> anything for maybe 30 seconds.
> Also, where I block the POST request you'll see I do a check for a
> variable that I change in the progress.GET. I have a feeling this
> doesn't work as the session.finished value isn't updated. Or is it?
>
> Thanks again for all the help guys!
>
> On Feb 9, 4:18 pm, andrei <[email protected]> wrote:
>
>
>
> > Yep, show your code.
>
> > On Feb 9, 6:24 pm, Oetzi <[email protected]> wrote:
>
> > > Ah right. That was a stupid question haha. The problem at the moment
> > > is mainly just that it seems to be very slow on GET requests and the
> > > whole thing seems very temperamental. Should I post my code up?
>
> > > On Feb 9, 9:58 am, andrei <[email protected]> wrote:
>
> > > > I use it with mysql, I think postgres is ok. You can always subclass
> > > > Store class and implement your storage.
>
> > > > What do you mean by using cookies with sessions? Webpy's Session saves
> > > > session id in cookies automatically for you.
>
> > > > If you need to manually set specific cookies, then you should read
> > > > thishttp://webpy.org/cookbook/cookies
>
> > > > On Feb 9, 12:10 pm, Oetzi <[email protected]> wrote:
>
> > > > > I'm using postgres. Is there a faster way to do it? Also, how do I use
> > > > > cookies with sessions?
>
> > > > > On Feb 8, 11:06 pm, andrei <[email protected]> wrote:
>
> > > > > > It adds a couple of sql requests per each http request (if you use
> > > > > > database backend to store session)  Loads the session data, updates
> > > > > > the access time and saves the session data.
>
> > > > > > On Feb 9, 1:28 am, Oetzi <[email protected]> wrote:
>
> > > > > > > Thanks for the comments guys. Will definitely try that out 
> > > > > > > Branko. One
> > > > > > > thing that is weird is that it kinda works now but the GETS for
> > > > > > > progress have crazy high ping when using servers instead of a 
> > > > > > > global
> > > > > > > variable. Does it do a database lookup on each variable access? Or
> > > > > > > does it just load at the begininng of the request?
>
> > > > > > > On Feb 8, 9:58 pm, Branko Vukeliæ <[email protected]> 
> > > > > > > wrote:
>
> > > > > > > > Also, try disabling debug if you haven't already.
>
> > > > > > > >     web.config.debug = False # if I remember correctly
>
> > > > > > > > On Tue, Feb 8, 2011 at 8:50 PM, Oetzi <[email protected]> 
> > > > > > > > wrote:
> > > > > > > > > I am now but it still doesn't seem to be working. Should I 
> > > > > > > > > call
> > > > > > > > > _save() on the session when I increment to keep everything 
> > > > > > > > > sycned?
>
> > > > > > > > --
> > > > > > > > Branko Vukelic
>
> > > > > > > > [email protected]http://www.brankovukelic.com/

-- 
You received this message because you are subscribed to the Google Groups 
"web.py" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/webpy?hl=en.

Reply via email to