|
Gregory (Grisha) Trubetskoy
grisha at modpython.org
Thu Apr 7 12:26:20 EDT 2005
There is no way that pickling stuff into a file is faster than a dbm.
Do you know which DBM implementation you were using in your tests?
Grisha
On Thu, 7 Apr 2005, dharana 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
>
|