From: <Joern.Schrader@R-KOM.de> - 2001-05-30 20:35:21
|
I have got a question concerning the object cache in MiddleKits ObjectStore (self._objects). Are there any plans introducing something like a cache cleaner for frequently clearing the _objects - Dict. in order to avoid never ending growing. Thanks, Joern. |
From: Chuck E. <Chu...@ya...> - 2001-05-30 21:05:44
|
At 12:33 PM 5/30/2001 +0200, J=F6rn Schrader wrote: >I have got a question concerning the object cache in MiddleKits ObjectStore >(self._objects). Are there any plans introducing something like a cache >cleaner for frequently clearing the _objects - Dict. in order to avoid= never >ending growing. Good question and "yes", I just haven't figured out what the approach is=20 gonna be and there have been some bigger priorities. For example, up until= =20 a week or two ago, DB API cursors were being improperly used making=20 multi-threading impossible. Just thinking off the top of my head, perhaps the store could convert=20 strong refs in _objects to weak ones after a certain time period. That way= =20 if you were really using the object, it would still be known in the object= =20 cache (which is important for "uniquing") but it could go away otherwise. I= =20 have to brush up on weak ref details again. I wonder if there is an interaction with this approach and g.c. and threads. -Chuck |
From: Sasa Z. <sa...@sp...> - 2001-05-31 13:42:00
|
Hi, I used MiddleKit's Generate.py to generate "middle" objects from Videos.mkmodel example. In Settings.config I defined "Package" : "middle" to generate a package. And of course I created __init__.py into the package directory. This is my directory structure: ./ Home.py -- this is a servlet ./middle __init__.py Videos.mkmodel/ GeneratedPy/ __init__.py GenMovie.py ... GeneratedSQL/ ... Movie.py Video.py ... in ./middle/__init__.py I have: from MiddleKit.Run.MySQLObjectStore import MySQLObjectStore modelFile = ... store = MySQLObjectStore(user="sasha") store.readModelFileNamed(modelFile) in ./Home.py: from middle import store from middle.Movie import Movie # <=== and the problem starts HERE!!! When I try http://myhost/WK/MyContext I get exception: ... File "/home/sasha/spuni/Home.py", line 4, in ? from middle.Movie import Movie File "/home/sasha/spuni/middle/Movie.py", line 6, in ? from GeneratedPy.GenMovie import GenMovie File "/home/sasha/spuni/middle/GeneratedPy/GenMovie.py", line 8, in ? from middle.Video import Video ImportError: No module named middle.Video Obviously GenMovie.py wants to import middle.Video but python can not find it in sys.path This is what I found in GenMovie.py: import sys sys.path.insert(0, '../../') from middle.Video import Video so it inserts '../../' in sys.path and tries to import middle.Video (because it is two levels up) but it fails. When you insert a relative path into sys.path is it relative to the current file or to the current directory ? It seems that it means relative to the current directory. Anybody of you generates middle objects as a package ? -- Sasa |
From: Chuck E. <Chu...@ya...> - 2001-05-31 13:59:37
|
Sasa, I have used the approach you describe, but with a couple diffs: * I make sure that the directory that contains Home.py and middle/ is in sys.path. I do this in the __init__.py of my context. Something like: def contextInitialize(app, ctxPath): import os, sys dirname = os.path.dirname newPath = dirname(__file__) if newPath not in sys.path: sys.path.append(newPath) Hmmm, I'm not sure why this uses __file__ instead of ctxPath, but I guess either one works. * And my real code (the above is a trimmed down snippet) is a little more complex: it has to go back an extra dir. My structure is like this: MyProject/ Web/ Pages/ __init__.py MyPage.py Utils/ SitePage.py UserPage.py Panel.py Middle/ Thing.py GeneratedPy/ ... The point here is that Pages/ is the context and everything that it uses that is not public content is put outside so there is no danger in trying to serve it via WebKit. The reason my Middle/ is even higher up than what's in Web/ is that there are other non-web applications using it. Otherwise, if it were strictly a web project, Middle/ might have been put in Web/ (and Web/ renamed to MyProject/). * Another diff: The store creation is outside the middle/ directory, but I'm not sure that has any affect on your situation. I would think it wouldn't, but I just haven't tried it before. Regarding '../../' working off of the cur process dir or the cur py module dir, I didn't even know when I first tried this. Based on my experience, though, it has to be the cur py module dir, because my app works fine and the cur dir doesn't match up such that the imports would have worked. Please try the tips above and let us know. If you confirm that they work, then I will expand the MK docs. -Chuck At 01:39 PM 5/31/2001 +0000, Sasa Zivkov wrote: >Hi, > >I used MiddleKit's Generate.py to generate "middle" objects from >Videos.mkmodel example. >In Settings.config I defined "Package" : "middle" to generate a package. >And of course I created __init__.py into the package directory. > >This is my directory structure: >./ >Home.py -- this is a servlet >./middle > __init__.py > Videos.mkmodel/ > GeneratedPy/ > __init__.py > GenMovie.py > ... > GeneratedSQL/ > ... > Movie.py > Video.py > ... > >in ./middle/__init__.py I have: >from MiddleKit.Run.MySQLObjectStore import MySQLObjectStore >modelFile = ... >store = MySQLObjectStore(user="sasha") >store.readModelFileNamed(modelFile) > >in ./Home.py: >from middle import store >from middle.Movie import Movie # <=== and the problem starts HERE!!! > >When I try http://myhost/WK/MyContext I get exception: >... > File "/home/sasha/spuni/Home.py", line 4, in ? > from middle.Movie import Movie > File "/home/sasha/spuni/middle/Movie.py", line 6, in ? > from GeneratedPy.GenMovie import GenMovie > File "/home/sasha/spuni/middle/GeneratedPy/GenMovie.py", line 8, in ? > from middle.Video import Video >ImportError: No module named middle.Video > >Obviously GenMovie.py wants to import middle.Video but python can not find >it in sys.path > >This is what I found in GenMovie.py: >import sys >sys.path.insert(0, '../../') >from middle.Video import Video > >so it inserts '../../' in sys.path and tries to import middle.Video (because >it is two levels up) but it fails. >When you insert a relative path into sys.path is it relative to the current >file or to the current directory ? >It seems that it means relative to the current directory. > >Anybody of you generates middle objects as a package ? > >-- Sasa |
From: Sasa Z. <sa...@sp...> - 2001-05-31 14:31:35
|
Thanks Chuck! The tip to put directory that contains the "middle" directory into the sys.path solved the problem! This should be put into MK documentation I think. Also putting '../../' into GenXXX.py seems to be out of use I played a little with inserting relative paths to sys.path and it seems that relavite means relative to the current dir not to the current module's dir. Maybe some python guru can help here :-) -- Sasa > -----Original Message----- > From: web...@li... > [mailto:web...@li...]On Behalf Of Chuck > Esterbrook > Sent: 31. maí 2001 13:55 > To: Sasa Zivkov; web...@li... > Subject: Re: [Webware-discuss] Problems with import in package generated > by MiddleKit > > > Sasa, > > I have used the approach you describe, but with a couple diffs: > > * I make sure that the directory that contains Home.py and middle/ is in > sys.path. I do this in the __init__.py of my context. Something like: > > def contextInitialize(app, ctxPath): > import os, sys > dirname = os.path.dirname > > newPath = dirname(__file__) > if newPath not in sys.path: > sys.path.append(newPath) > > Hmmm, I'm not sure why this uses __file__ instead of ctxPath, but I guess > either one works. > > * And my real code (the above is a trimmed down snippet) is a little more > complex: it has to go back an extra dir. My structure is like this: > > MyProject/ > Web/ > Pages/ > __init__.py > MyPage.py > Utils/ > SitePage.py > UserPage.py > Panel.py > Middle/ > Thing.py > GeneratedPy/ > ... > > The point here is that Pages/ is the context and everything that it uses > that is not public content is put outside so there is no danger in trying > to serve it via WebKit. > > The reason my Middle/ is even higher up than what's in Web/ is that there > are other non-web applications using it. Otherwise, if it were strictly a > web project, Middle/ might have been put in Web/ (and Web/ renamed to > MyProject/). > > * Another diff: The store creation is outside the middle/ directory, but > I'm not sure that has any affect on your situation. I would think it > wouldn't, but I just haven't tried it before. > > > > Regarding '../../' working off of the cur process dir or the cur > py module > dir, I didn't even know when I first tried this. Based on my experience, > though, it has to be the cur py module dir, because my app works fine and > the cur dir doesn't match up such that the imports would have worked. > > Please try the tips above and let us know. If you confirm that they work, > then I will expand the MK docs. > > -Chuck > > > > At 01:39 PM 5/31/2001 +0000, Sasa Zivkov wrote: > >Hi, > > > >I used MiddleKit's Generate.py to generate "middle" objects from > >Videos.mkmodel example. > >In Settings.config I defined "Package" : "middle" to generate a package. > >And of course I created __init__.py into the package directory. > > > >This is my directory structure: > >./ > >Home.py -- this is a servlet > >./middle > > __init__.py > > Videos.mkmodel/ > > GeneratedPy/ > > __init__.py > > GenMovie.py > > ... > > GeneratedSQL/ > > ... > > Movie.py > > Video.py > > ... > > > >in ./middle/__init__.py I have: > >from MiddleKit.Run.MySQLObjectStore import MySQLObjectStore > >modelFile = ... > >store = MySQLObjectStore(user="sasha") > >store.readModelFileNamed(modelFile) > > > >in ./Home.py: > >from middle import store > >from middle.Movie import Movie # <=== and the problem starts HERE!!! > > > >When I try http://myhost/WK/MyContext I get exception: > >... > > File "/home/sasha/spuni/Home.py", line 4, in ? > > from middle.Movie import Movie > > File "/home/sasha/spuni/middle/Movie.py", line 6, in ? > > from GeneratedPy.GenMovie import GenMovie > > File "/home/sasha/spuni/middle/GeneratedPy/GenMovie.py", line 8, in ? > > from middle.Video import Video > >ImportError: No module named middle.Video > > > >Obviously GenMovie.py wants to import middle.Video but python > can not find > >it in sys.path > > > >This is what I found in GenMovie.py: > >import sys > >sys.path.insert(0, '../../') > >from middle.Video import Video > > > >so it inserts '../../' in sys.path and tries to import > middle.Video (because > >it is two levels up) but it fails. > >When you insert a relative path into sys.path is it relative to > the current > >file or to the current directory ? > >It seems that it means relative to the current directory. > > > >Anybody of you generates middle objects as a package ? > > > >-- Sasa > > > _______________________________________________ > Webware-discuss mailing list > Web...@li... > http://lists.sourceforge.net/lists/listinfo/webware-discuss > |
From: Chuck E. <Chu...@ya...> - 2001-05-31 14:45:01
|
At 02:29 PM 5/31/2001 +0000, Sasa Zivkov wrote: >Thanks Chuck! > >The tip to put directory that contains the "middle" directory into the >sys.path solved the problem! >This should be put into MK documentation I think. > >Also putting '../../' into GenXXX.py seems to be out of use >I played a little with inserting relative paths to sys.path >and it seems that relavite means relative to the current dir >not to the current module's dir. > >Maybe some python guru can help here :-) Well you said your app works, right? What does os.getcwd() give you in your app? -Chuck |
From: Sasa Z. <sa...@sp...> - 2001-05-31 15:06:51
|
> > Well you said your app works, right? What does os.getcwd() give > you in your > app? os.getcwd() gives: /usr/local/lib/python2.1/Webware/WebKit which is directory where I started AppServer from. -- Sasa |
From: Chuck E. <Chu...@ya...> - 2001-05-31 15:18:11
|
At 03:04 PM 5/31/2001 +0000, Sasa Zivkov wrote: > > Well you said your app works, right? What does os.getcwd() give > > you in your > > app? > >os.getcwd() gives: > >/usr/local/lib/python2.1/Webware/WebKit > >which is directory where I started AppServer from. Well then '../../' would be: /usr/local/lib/python2.1/ But that's not where 'middle' lives, so the "from middle.video import video" in GenVideo that is now working, seems to prove that '../../' works off of the "cur module dir" and not the "cur process dir". -Chuck |
From: Sasa Z. <sa...@sp...> - 2001-05-31 15:26:05
|
> -----Original Message----- > From: Chuck Esterbrook [mailto:Chu...@ya...] > Sent: 31. maí 2001 15:14 > To: Sasa Zivkov; web...@li... > Subject: RE: [Webware-discuss] Problems with import in package generated > by MiddleKit > > > At 03:04 PM 5/31/2001 +0000, Sasa Zivkov wrote: > > > Well you said your app works, right? What does os.getcwd() give > > > you in your > > > app? > > > >os.getcwd() gives: > > > >/usr/local/lib/python2.1/Webware/WebKit > > > >which is directory where I started AppServer from. > > Well then '../../' would be: > > /usr/local/lib/python2.1/ > > > But that's not where 'middle' lives, so the "from middle.video import > video" in GenVideo that is now working, seems to prove that > '../../' works > off of the "cur module dir" and not the "cur process dir". "from middle.video import video" in GenVideo is now working not because of "../../" but because (based on your tip) I put the "middle"'s parent directory into sys.path I can comment out the line that inserts "../../" into sys.path in GenVideo.py and "from middle.video import video" still works. -- Sasa |
From: Chuck E. <Chu...@ya...> - 2001-05-31 16:22:15
|
At 03:23 PM 5/31/2001 +0000, Sasa Zivkov wrote: >"from middle.video import video" in GenVideo is now working not because >of "../../" but because (based on your tip) I put the "middle"'s parent >directory >into sys.path > >I can comment out the line that inserts "../../" into sys.path in >GenVideo.py and "from middle.video import video" still works. So maybe we should - dispense with the temporary sys.path ../ style enhancement - require that the sys.path/PYTHONPATH include the path of either the objects or the package - encourage via the docs the use of Package in order to reduce name collisions with other Python modules, including the std library, servlets, etc. Comments anyone? -Chuck |
From: Sasa Z. <sa...@sp...> - 2001-05-31 16:43:40
|
> So maybe we should > - dispense with the temporary sys.path ../ style enhancement > - require that the sys.path/PYTHONPATH include the path of either the > objects or the package > - encourage via the docs the use of Package in order to reduce name > collisions with other Python modules, including the std library, > servlets, etc. > > Comments anyone? I completely agree with this proposal. I would also include in docs the tip to use __init__.py of the Context to insert path of the package/objects into sys.path (when MiddleKit is used from WebKit app) -- Sasa |
From: Chuck E. <Chu...@ya...> - 2001-05-31 17:01:11
|
At 04:41 PM 5/31/2001 +0000, Sasa Zivkov wrote: >I would also include in docs the tip to use __init__.py of the Context >to insert path of the package/objects into sys.path (when MiddleKit >is used from WebKit app) Right, I was planning on using the final form of everything we went over today. Thanks for working with me on this, -Chuck |
From: Sasa Z. <sa...@sp...> - 2001-05-31 17:17:39
|
> At 04:41 PM 5/31/2001 +0000, Sasa Zivkov wrote: > >I would also include in docs the tip to use __init__.py of the Context > >to insert path of the package/objects into sys.path (when MiddleKit > >is used from WebKit app) > > Right, I was planning on using the final form of everything we > went over today. > > Thanks for working with me on this, > -Chuck > It was my pleasure :-) I would really like to start using Webware in the company I work for and it seems that others do not complain :-) And yes: My speed tests showed that Webware is about 9 times faster than PHP in the case PHP application is made in an object oriented way!! -- Sasa |
From: Chuck E. <Chu...@ya...> - 2001-05-31 18:34:33
|
At 05:15 PM 5/31/2001 +0000, Sasa Zivkov wrote: >My speed tests showed that Webware is about 9 times faster than PHP >in the case PHP application is made in an object oriented way!! That's fascinating. I would love to get the details on that. It would make a nice article/paper for the web site (http://webware.sourceforge.net/Papers). -Chuck |
From: Tavis R. <ta...@ca...> - 2001-05-31 19:03:13
|
On Thursday 31 May 2001 11:30, Chuck Esterbrook wrote: > At 05:15 PM 5/31/2001 +0000, Sasa Zivkov wrote: > >My speed tests showed that Webware is about 9 times > > faster than PHP in the case PHP application is made in > > an object oriented way!! > > That's fascinating. I would love to get the details on > that. It would make a nice article/paper for the web site > (http://webware.sourceforge.net/Papers). My experience is similar. I had an object orientated framework in PHP for doing something like what the Page class and TemplateServer's SkeletonPage class do. PHP was serving at around 35-40 req/sec for about a 2 pages of HTML and with no DB stuff. The same with WebWare/Page is serving at over 100 /sec. With Webware and TemplateServer it's almost 200 /sec. But more importantly, it's far simpler to understand and maintain and the dev speed is dramatically faster. And this is for a simple application! It's with complex applications that Python/Webware really trumps PHP, ASP, etc.. Kudos for WebWare! |
From: Sasa Z. <sa...@sp...> - 2001-06-01 10:56:42
|
> On Thursday 31 May 2001 11:30, Chuck Esterbrook wrote: > > At 05:15 PM 5/31/2001 +0000, Sasa Zivkov wrote: > > >My speed tests showed that Webware is about 9 times > > > faster than PHP in the case PHP application is made in > > > an object oriented way!! > > > > That's fascinating. I would love to get the details on > > that. It would make a nice article/paper for the web site > > (http://webware.sourceforge.net/Papers). I have been converting one our PHP app to Webware app, and when it is finised I will do speed tests again. Right now I have just tested small examples with only one HTML page + database access. At this moment I do not know when the conversion will be finished but I will definitely let you know results of speed tests once it is finished. > My experience is similar. I had an object orientated framework > in PHP for doing something like what the Page class and > TemplateServer's SkeletonPage class do. PHP was serving at > around 35-40 req/sec for about a 2 pages of HTML and > with no DB stuff. The same with WebWare/Page is serving at over > 100 /sec. With Webware and TemplateServer it's almost > 200 /sec. But more importantly, it's far simpler to understand and > maintain and the dev speed is dramatically faster. And this is > for a simple application! It's with complex applications that > Python/Webware really trumps PHP, ASP, etc.. Definitely! -- Sasa |