| Iain Mackay 
    imm at iain-mackay.org Tue Jul 6 21:17:45 EDT 2004 
 Thanks Grisha for being so quickly on the case.
Session.py also includes the solution to my problem, using the Apache global
locks.
I now have the following code to protect a section of  script that is using
the database connection (it uses SQLite but would apply mutatis mutandis to
another database). I have restored multi-threading and all works smoothly. 
If this is the best way to do this, it might be worth a mention in the next
release of the documentation. I suppose ideally application code shouldn't
use _apache.
from mod_python import apache
import _apache
import re
import sqlite
import userdatabase
import sys
 
users = None
apache.log_error ("userHandler initialising", apache.APLOG_INFO)
 
def beginDB (req):
        _apache._global_lock(req.server, None, 0)
            global users
            if not users:
                        try:
                                    try:
                                                defaultUser =
req.get_options ()["defaultUser"]
                                    except:
                                                defaultUser = "guest"
                                    users = userdatabase.UserDatabase\
                                                (sqlite.connect
(req.get_options ()["dbFile"],
                                                077, autocommit=1),
defaultUser)
                        except:
                                    (type, value, tb) = sys.exc_info()
                                    apache.log_error ("Cannot access user
database: %s (%s)" % (type, value),
                                                apache.APLOG_ERR)
        
def endDB (req):
        _apache._global_unlock(req.server, None, 0)
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://modpython.org/pipermail/mod_python/attachments/20040706/04fb22db/attachment.html
 |