[mod_python] Sessions performance and some numbers

Nicolas Lehuen nicolas.lehuen at gmail.com
Thu Apr 7 16:59:10 EDT 2005


On Apr 7, 2005 9:39 PM, Jim Gallacher <jg.lists at sympatico.ca> wrote:
> Nicolas Lehuen wrote:
> > Hi,
> >
> > Your code seems perfect to me. We could indeed add an extra hash to
> > the directory name so that all sessions do not end in the same
> > directory ; but I guess this is not needed on modern FS like ReiserFS
> > or WinFS.
> >
> > Also, the unlink call in do_delete needs an "os." to be correct...
> >
> > If everybody is OK I could integrate your class into the Session.py
> > module, so that it becomes a standard session implementation in the
> > next release.
> 
> Shouldn't a lock be aquired and released before reading and writing the
> session to a file?

Yeah, of course, though we could rely on the native filesystem locking
capabilities.

Regards,
Nicolas

> 
> Regards,
> Jim
> 
> > Grisha, Graham, what do you think ?
> >
> > Just as a note, the DbmSession relies on the anydbm module ; maybe the
> > crappy performance were due to the fact that anydbm reverted to a
> > crappy implementation, not the fastest (?) Berkeley-DB based one.
> >
> > Regards,
> >
> > Nicolas
> >
> > On Apr 7, 2005 5:01 PM, dharana <dharana at dharana.net> wrote:
> >
> >>
> >>Graham Dumpleton wrote:
> >>
> >>>On 07/04/2005, at 8:08 PM, dharana wrote:
> >>>
> >>>
> >>>>If you want I can send my modified Session.py with the new FileSession
> >>>>class for review.
> >>>
> >>>
> >>>There probably shouldn't have been a need for you to copy/modify the actual
> >>>Session.py file which came with mod_python as your derived version could
> >>>live quite happily in its own module and simply used the installed Session
> >>>module.
> >>>
> >>
> >>I presumptuously thought that it could fit into the official mod_python
> >>package due to it's high performance when compared to DbmSession.
> >>
> >> >
> >>
> >>>Anyway, by all means post your code as sure it will be of interest to
> >>>someone, if not now then maybe in the future. If there are any problems
> >>>in what you have done, someone is also bound to point it out.
> >>>
> >>
> >>Here it goes. Please point out any obvious problem. Apart from being new
> >>to mod_python I'm also new to Python in general. For example, I don't
> >>think the exception handling I've put is completely correct.
> >>
> >>In anticipation for any possible attachment problems i pasted it
> >>directly. (I have read PEP 0008 and the 4 spaces indentation level
> >>recommendation but I'm in a hurry right now, sorry.)
> >>
> >>--- FileSession.py -----------------------------------------------------
> >>import cPickle
> >>import tempfile
> >>
> >>from mod_python import Session
> >>
> >>tempdir = tempfile.gettempdir()
> >>
> >>class FileSession(Session.BaseSession):
> >>
> >>   def __init__(self, req, sid=0, secret=None, timeout=0, lock=1):
> >>
> >>     Session.BaseSession.__init__(self, req, sid=sid, secret=secret,
> >>                          timeout=timeout, lock=lock)
> >>
> >>   def do_cleanup(self):
> >>     import os
> >>
> >>     # is there any faster way of doing this?
> >>     for f in os.listdir(tempdir):
> >>       if f.find('mp_sess_', 0, 11) == -1:
> >>         continue
> >>
> >>       fp = file('%s%s' % (tempdir, f))
> >>       dict = cPickle.load(fp)
> >>       fp.close()
> >>
> >>       if (time() - dict['_accessed']) > dict['_timeout']:
> >>         os.unlink('%s%s' % (tempdir, f))
> >>
> >>   def do_load(self):
> >>     try:
> >>     # again, is there a more pythonic way of doing this check?
> >>       fp = file('%s/mp_sess_%s' % (tempdir, self._sid))
> >>     except Exception:
> >>       return None
> >>     else:
> >>       try:
> >>         data = cPickle.load(fp)
> >>         fp.close()
> >>         return data
> >>
> >>       except Exception:
> >>         fp.close()
> >>         pass
> >>
> >>   def do_save(self, dict):
> >>     fp = file('%s/mp_sess_%s' % (tempdir, self._sid), 'w+')
> >>     cPickle.dump(dict, fp)
> >>     fp.close()
> >>
> >>   def do_delete(self):
> >>     try:
> >>       unlink('%s/mp_sess_%s' % (tempdir, self._sid))
> >>     except Exception:
> >>       pass
> >>------------------------------------------------------------------------
> >>
> >>--
> >>Juan Alonso
> >>http://gamersmafia.com | http://laflecha.net
> >>
> >>
> >>import cPickle
> >>import tempfile
> >>
> >>from mod_python import Session
> >>
> >>tempdir = tempfile.gettempdir()
> >>
> >>class FileSession(Session.BaseSession):
> >>
> >>  def __init__(self, req, sid=0, secret=None, timeout=0, lock=1):
> >>
> >>    Session.BaseSession.__init__(self, req, sid=sid, secret=secret,
> >>                         timeout=timeout, lock=lock)
> >>
> >>  def do_cleanup(self):
> >>    import os
> >>
> >>    # is there any faster way of doing this?
> >>    for f in os.listdir(tempdir):
> >>      if f.find('mp_sess_', 0, 11) == -1:
> >>        continue
> >>
> >>      fp = file('%s%s' % (tempdir, f))
> >>      dict = cPickle.load(fp)
> >>      fp.close()
> >>
> >>      if (time() - dict['_accessed']) > dict['_timeout']:
> >>        os.unlink('%s%s' % (tempdir, f))
> >>
> >>  def do_load(self):
> >>    try:
> >>    # again, is there a more pythonic way of doing this check?
> >>      fp = file('%s/mp_sess_%s' % (tempdir, self._sid))
> >>    except Exception:
> >>      return None
> >>    else:
> >>      try:
> >>        data = cPickle.load(fp)
> >>        fp.close()
> >>        return data
> >>
> >>      except Exception:
> >>        fp.close()
> >>        pass
> >>
> >>  def do_save(self, dict):
> >>    fp = file('%s/mp_sess_%s' % (tempdir, self._sid), 'w+')
> >>    cPickle.dump(dict, fp)
> >>    fp.close()
> >>
> >>  def do_delete(self):
> >>    try:
> >>      unlink('%s/mp_sess_%s' % (tempdir, self._sid))
> >>    except Exception:
> >>      pass
> >>
> >>
> >>_______________________________________________
> >>Mod_python mailing list
> >>Mod_python at modpython.org
> >>http://mailman.modpython.org/mailman/listinfo/mod_python
> >>
> >>
> >>
> >
> > _______________________________________________
> > Mod_python mailing list
> > Mod_python at modpython.org
> > http://mailman.modpython.org/mailman/listinfo/mod_python
> >
> 
>


More information about the Mod_python mailing list