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.