From: <Joern.Schrader@R-KOM.de> - 2001-05-28 06:24:56
|
>This isn't thread-safe -- 2 servlets could create the store at the same time. > >You're better off putting the store initialization into a module that gets >imported -- then Python automatically ensures that only one thread imports >it at once. (Either that or you should explicitly use a threading.Lock >object to make it thread-safe.) > >If you want to "pre-load" the store when the app server starts up to reduce >response time, then you can put the import into the __init__.py in your >context directory. __init__.py automatically gets imported when the app >server starts. Thanks Geoff for your hint concerning thread-safety. But Ian's way to have a Base Servlet that cares for store opening is attractive too. Do you think, that one can mix both methods by having a store initialization module that gets imported in a base servlet: # MyObjectStore.py from MiddleKit.Run.MySQLObjectStore import MySQLObjectStore store = MySQLObjectStore() store.readModelFileNamed('MyMiddleKitModel') # MyPage.py from MyObjectStore import store from WebKit.Page import Page class MyPage(Page): def Store(self): return store # MyDerivedPage.py from MyPage import MyPage class MyDerivedPage(MyPage): def writeContent(self): currentStore = self.Store() # do something with currentStore Is the above code thread-save. Joern. |
From: Chuck E. <Chu...@ya...> - 2001-05-28 15:13:49
|
At 08:24 AM 5/28/2001 +0200, J=F6rn Schrader wrote: >Is the above code thread-save. > >Joern. I happen to know that Geoff does mix both techniques in the same manner=20 than you have described. So do I. I think his earlier message was just emphasizing that the initialization=20 code should go in the module. Feel free to load up SitePage with as many conveniences as appropriate for= =20 your site. -Chuck |
From: Geoff T. <gta...@me...> - 2001-05-29 12:38:52
|
At 08:24 AM 5/28/2001 +0200, J=F6rn Schrader wrote: > >This isn't thread-safe -- 2 servlets could create the store at the same >time. > > > >You're better off putting the store initialization into a module that= gets > >imported -- then Python automatically ensures that only one thread= imports > >it at once. (Either that or you should explicitly use a threading.Lock > >object to make it thread-safe.) > > > >If you want to "pre-load" the store when the app server starts up to= reduce > > >response time, then you can put the import into the __init__.py in your > >context directory. __init__.py automatically gets imported when the app > >server starts. > >Thanks Geoff for your hint concerning thread-safety. But Ian's way to have= a >Base >Servlet that cares for store opening is attractive too. Do you think, that >one can >mix both methods by having a store initialization module that gets imported >in >a base servlet: Yes, this combined solution is thread-safe, and IMHO it's the best way to=20 do this, because if you ever needed to change MyPage.Store() to do=20 something else you'd be able to do so. - Geoff ># MyObjectStore.py >from MiddleKit.Run.MySQLObjectStore import MySQLObjectStore >store =3D MySQLObjectStore() >store.readModelFileNamed('MyMiddleKitModel') > > ># MyPage.py >from MyObjectStore import store >from WebKit.Page import Page >class MyPage(Page): > def Store(self): > return store > ># MyDerivedPage.py >from MyPage import MyPage >class MyDerivedPage(MyPage): > def writeContent(self): > currentStore =3D self.Store() > # do something with currentStore > >Is the above code thread-save. > > >Joern. > > >_______________________________________________ >Webware-discuss mailing list >Web...@li... >http://lists.sourceforge.net/lists/listinfo/webware-discuss |