quetz-mod_python-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jim Gallacher <jg.li...@sympatico.ca>
Subject Re: [mod_python] Sessions performance and some numbers
Date Sat, 09 Apr 2005 16:28:34 GMT
dharana wrote:
> Any drawbacks if we just look at the mtime of the file? If it's older 
> than cur_time - expiration_time then delete it. That way we wouldn't 
> need to open it and check if it has expired. It would be uglier but it 
> would be faster, and the whole purpose of creatnig FileSession was to 
> maximize performance (at least that was my original purpose).

I was thinking along the same lines. This assumes that all sessions use 
the same timeout value, forever, which may be a reasonable compromise. 
As an additional check, any session files that fail the (cur_time - 
timeout) > mtime could then be unpickled and verified before deleting. 
Perhaps this second check could be an optional parameter passed in the 
FileSession constructor?

In a separate reply Nicolas commented:
 > I was thinking about this particular optimization, and it seems ok,
 > provided the session is saved each time it is accessed.

As I understand it, the session must always be saved, otherwise the 
value of sess._accessed cannot be known for previously exisiting sessions.

Anyway, here is my psuedo code:

def do_cleanup(self):
     for sess_file in session_file_list:
         if current_time - self._timeout > file_mtime(sess_file):
             if self._verify_session_data_before_delete:
                 sess_data = cPickle.load(sess_file)
                 if session_has_expired(sess_data):


> Jim Gallacher wrote:
>> Barry Pearce wrote:
>>> I assume that session expiry and subsequent cleanup has been thought 
>>> of...so I wont go into any further detail on that tangent!
>> Yes, but the proposed code for FileSession could be a problem if there 
>> are a large number of sessions. The cleanup is run once in some random 
>> number of requests approximating 1000.
>> Psuedo code:
>> for sess_file in session_file_list:
>>     sess_data = cPickle.load(sess_file)
>>     if session_has_expired(sess_data):
>>         delete_file(sess_file)
>> Every session file is unpickled to see if the session has expired. 
>> This has GOT to hurt performance when the number of sessions rises to 
>> a significant number.
>> Regards,
>> Jim

View raw message