Thimios Katsoulis
thkatsou at yahoo.gr
Mon Oct 15 05:03:23 EDT 2007
>Hmm, I not sure if this is an answer to your own question or you are >replying to a really old post, as I don't remember the question. >Either way, the code being presented as an example on the way to solve >this is unsafe for a number of reasons. >The first reason is that it isn't thread protected and thus isn't safe >in a multithread process such as when Apache UNIX worker MPM or >Windows winnt MPM is used. This is because multiple handlers could be >executing concurrently and both decide the global database handle >needs to be created. What you mean by multiple handlers ? Multithreaded apache that has multiple threads in each process? So in this case global variables are shared between different threads in the same process right? >This could result in wasted resources. Wasted resources? Pls explain. >A second possible problem which can occur is where the global database >handle and the code for creating it, is placed in a code module which >is the subject of automatic reloading. I have now realized that in every reload of the file even if the global variable was created in previous invocation it is re-created. But why ? Once it's created as global shouldn't it exist after first invocation of the module and thus not be recreated ? > So, once threading issues are >dealt with then okay, but do not go putting it in the same code file >as your mod_python handlers, or in general anywhere in the document >tree. Instead put it in a module somewhere else on sys.path outside of >the document tree. For an example of why this can be a problem see: > http://groups.google.com/group/sqlalchemy/browse_thread/thread/5193bc7598f045fb# >Also ensure you read documentation for import_module() in: > http://www.modpython.org/live/current/doc-html/pyapi-apmeth.html >It mentions a bit about resource leakage and transferring data from >old module to new module. Ensure you are using mod_python 3.3.1 >though, as older versions were a bit less predictable. > http://www.dscpl.com.au/wiki/ModPython/Articles/ModuleImportingIsBroken Graham On 14/10/2007, Thimios Katsoulis <thkatsou at yahoo.gr> wrote: > Hello. > > Sorry for my poor english. Here is my mod_python code. This is a simple > URL shorter: > > from mod_python import apache, util > import psycopg2 as psycopg > > def handler(req): > req.content_type = "text/plain" > url_id = req.args > connection = psycopg.connect("dbname=my_db") > cursor = connection.cursor() > cursor.execute("""SELECT myurl FROM urls WHERE myid=%s""",(url_id)) > original_url = cursor.fetchone()[0] > connection.close() > util.redirect(req,original_url) > req.status = apache.DONE > return apache.DONE > > This programme connects database everytime, but I want(need) force him > to connect it continously > > This script connects database everytime (psycopg.connect("dbname=my_db") > , but I nedd force to stay conneceted with it continously. It is > possible to make that in mod_python ? I have mod_python 3.2.10 > > Thanks in advance. > rdn > --------------- > > Yes mod_python can maintain global variables per interpreter, so you can open once the connection > and all subsequent requests will use the opened connection. > You have to declare your connection variable as global e.g. : > > > def getConn(self): > > try: > if _conn == None: > self.openConn() > > > except NameError: > self.openConn() > return _conn > > def openConn(self): > > global _conn > _conn = connect(self.ConnStr) > > > So when you want to access it you call self.getConn(). > The _conn global variable will instantiate once for each mod_python apache process. > You can include some apache.log_error calls in the code above to watch > for yourself when the _conn varible gets instantiated and when it is retreived as global. > Please take notice from what I have observed that while you maintain open connections to DB (postgresql too in my case) > you cannot change structure of the tables etc in the DB.. > Of course if you are using modules and not objects you have to alter the code to support (removing self ..) modules. > > > > > > > > > > ___________________________________________________________ > Χρησιμοποιείτε Yahoo!; > Βαρεθήκατε τα ενοχλητικά μηνύματα (spam); Το Yahoo! Mail > διαθέτει την καλύτερη δυνατή προστασία κατά των ενοχλητικών > μηνυμάτων http://login.yahoo.com/config/mail?.intl=gr > > > > _______________________________________________ > 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 End of Mod_python Digest, Vol 55, Issue 18 ****************************************** ___________________________________________________________ Χρησιμοποιείτε Yahoo!; Βαρεθήκατε τα ενοχλητικά μηνύματα (spam); Το Yahoo! Mail διαθέτει την καλύτερη δυνατή προστασία κατά των ενοχλητικών μηνυμάτων http://login.yahoo.com/config/mail?.intl=gr
|