[mod_python] Best way to have an unique_id per request

Luca Montecchiani l.montecchiani at teamsystem.com
Wed Apr 23 11:28:22 EDT 2008


Hi all,
I'm in the process to improve the function we use to get an unique id 
each time we call it.
This is the current implementation, initially it was based only on 
req.request_time,
bad assumption because different request could have the same 
request_time value
and so I've added a random value that should limit this side effect.
I've also added a counter (req.uniqidprog) to support multiple calls 
inside the
same request.

def getuniqid(req,prefix=''):
    from random import random
    req.uniqidprog = req.uniqidprog + 1
    _tmpid = "%s%s%d%s" % ( prefix ,str(req.request_time), 
req.uniqidprog, str(random()) )
    return _tmpid.replace('.','')

Our production environment is :
Windows 32bit / Linux 32bit
Apache 2.2.8
Python 2.5.2
Modpython 3.3.1
Postgresql 8.2.7
Psycopg 2.0.7

This seem to works fine but I'm worried about its correctness and possible
collisions under heavy loads.

Can I use the Session._new_sid() function without worrying about lock/unlock
and other issues ? Something very simple like that :

def getuniqid(req,prefix=''):
    from mod_python import Session
    return "%s%s" % ( prefix ,  Session._new_sid(req) )

Googling a bit I've found a "mod_unique_id" apache module that could do the
job unfortunately it states that is not reliable on Windows environment 
:( and I
don't know how could impact on performance...

Thanks in advance,
luca

-- 
Luca Montecchiani
Software Di Base
TeamSystem S.p.a.
------------------------------------------------------------------------------------------
Informativa ai sensi del D. Lgs. 196-30/06/2003.
Il contenuto di questa e.mail e degli eventuali allegati, deve essere nella disponibilità
del solo destinatario.  Se ricevete per errore questa e-mail siete pregati di informarci
(rispedendola al mittente) e di provvedere alla sua rimozione.
Possono essere presenti informazioni riservate e non corrette (parzialmente o totalmente).
Le e-mail in partenza e in arrivo possono essere oggetto di monitoraggio
da parte di Teamsystem spa.  Del contenuto è responsabile il mittente della presente.
Chiunque venga in possesso non autorizzato di questa e-mail è vincolato
dalla Legge a non leggerne il contenuto, a non copiarla, a non diffonderla e a non usarla.
Informiamo che per l' esercizio dei diritti di cui all'art. 7 del d.lgs.196/2003 ci si può
rivolgere al Titolare del trattamento Teamsystem S.r.l. via Gagarin 205 61100 PESARO
per posta o fax, indicando sulla busta o sul foglio la dicitura "Inerente alla Privacy",
o inviando una e-mail all' indirizzo privacy at teamsystem.com .
------------------------------------------------------------------------------------------



More information about the Mod_python mailing list