This isn't a Python problem -- it's a bug in Webware.

If you put a print statement at the end of UnboundMethodError.py you'll
find that the module actually gets imported multiple times.  This
somehow causes a mismatch between the instances and the classes that
triggers the error you're noticing.

If you restart the appserver, then use your web browser to directly
access the UnboundMethodError servlet, then go to UnboundMethod.html,
the error goes away.  The images come up fine with no errors as long as
the appserver stays running.

What this leads me to believe is that there is a race condition in
WebKit.  If there are multiple simultaneous requests for a servlet that
hasn't yet been loaded, the module containing the servlet gets imported
multiple times simultaneously, causing various errors.  This would
persist through the lifetime of the appserver since it never throws away
old servlet instances.  But if the first access for the servlet occurs
in isolation, then the problem is avoided.

I'll see if I can add some locking into ServletFactory to solve the
problem.

- Geoff


On Sat, 2002-07-13 at 22:48, Roger Haase wrote:
> I got lucky yesterday and stumbled across a solution which has been right in 
> front of me on the failing line.  My problem seems to be rooted in Python.  I 
> wrote the following with the intention of posting to the Python bug list.  
> Does this sound reasonable?
> 
> 
> TypeError: unbound Method 
>  
> I sometimes receive the following error: 
>  
> TypeError: unbound method getImage() must be called with UnboundMethodError 
> instance as first argument (got UnboundMethodError instance instead) 
>  
> As the message states, the required object instance is the same as the object 
> instance passed. 
>  
> The problem occurs only when using the calling form: 
>       className.methodName(self,arg,..) 
> and an easy workaround is to use the form: 
>       self.methodName(arg,...) 
>  
> The error occurs rarely and unpredictably on both Linux and Windows/ME using 
> Python 2.1.1 and 2.2.1 (ActiveState distribution on Windows) in a web 
> application that uses Apache as a web server and the Webware/WebKit 
> application framework. I was able to recreate the problem in a simple test 
> case.  See: 
>       http://www.users.qwest.net/~haaserd/Unbound/UnboundMethod.html 
>       http://www.users.qwest.net/~haaserd/Unbound/UnboundMethodError.py 
>       http://www.users.qwest.net/~haaserd/Unbound/Error1.html 
>       http://www.users.qwest.net/~haaserd/Unbound/Error2.html 
>  
> Note: UnboundMethod.html will fail to load images, do a view source. 
>  
> When loaded in its required environment, UnboundMethod.html displays 12 
> images by requesting a Webware/WebKit servlet: 
>       <img src="UnboundMethodError?fileName=P10100xx.JPG"> 
>  
> The Webware/WebKit AppServer passes control to the writeHTML function within 
> the UnboundMethodError.py script.  This forms a fully qualified filename and 
> passes it to the getImage function via: 
>       img = UnboundMethodError.getImage(self,fileName,1000) 
> The two html pages error1.html and error2.html are the Webware/WebKit 
> formatted abends from 2 of the 12 invocations which failed at the above 
> statement.  The failing images in this case were numbers 3 and 8.  The other 
> 10 images were displayed correctly. 
>  
> For normal processing, the writeHTML function calls getImage. The recursive 
> calls made by getImage were an unsuccessful attempt to increase the number of 
> errors.  The getImage2 function uses PIL to read the JPG file, reduce it to a 
> thumbnail, and return the image. 
>  
> Until about one month ago, this error has occurred perhaps 20 times over a 
> year on an AMD Athlon 700 and AMD Duron 1000 using Python 2.1.1 on both Linux 
> and Windows/ME.  The failure occurred in a script ShowPix.py which is more 
> complex than the test case above.  The usual circumstances were Apache and 
> MySQL (and perhaps several other applications) were running, the 
> Webware/WebKit AppServer is started/restarted and (rarely) the first 
> transaction to display an image using ShowPix.py would fail on the unbound 
> method error.  After the first failure, there were no additional failures.  I 
> should note I am retired and doing this as a hobby so the 20 errors over a 
> year occurred during 300 - 500 hours of programming and testing. 
>  
> Within the last month I changed my test system over to an Intel 1.5 and 
> downloaded more current versions of all software, including Python 2.2.1 
> (ActiveState distribution under Windows) and the frequency of the error has 
> increased.  Instead of just the one failure described above, now when the 
> problem occurs (immediately after starting/restarting the Webware AppServer) 
> about 20% of the ShowPix.py transactions displaying images fail.  In a web 
> page which displays 9 to 100 images, the failing instances are scattered more 
> or less evenly over the page.  Redisplaying the same page results in about 
> the same number of errors but a different set of images fail with each reload 
> of the page.  All pages using the ShowPix.py script will continue to produce 
> failures at about the 20% rate until I restart the Webware Appserver.  
>  
> I have been unable to establish a cause/effect relationship as to why this 
> error sometimes occurs.  I suspect it is related to my starting another 
> unrelated application such as MS Word or Excel, etc. during the course of my 
> testing.  I can not make the error occur on demand, and was only able to 
> provide the test case above by creating the script during one of the recent 
> failing episodes before restarting the Webware AppServer.  Also, I have been 
> unable to recreate the problem over a 3 hour period by running only the 
> simple test case and restarting the AppServer many times.  So there may be 
> some other curious code in my Python-only application which sets up the error 
> condition. 
>  
> I should note the original failing module (ShowPix.py) is one of my first 
> Python programs written when I used the className.methodName(self) style of 
> calls.  When I changed the abending statement to the self.methodName() form, 
> the error in ShowPix.py moved to a second instance of the 
> className.methodName style of call.  When I changed all of the calls within 
> ShowPix.py to the self.methodName, the errors stopped and I took the 
> opportunity (before stopping the AppServer) to write the test case described 
> above. 
>  
> If you need any other information, I can be reached at [EMAIL PROTECTED] 
>  
> Roger Haase 
> 
> 
> 
> On Friday 12 July 2002 05:32 am, Geoff Talvola wrote:
> > On Thu, 2002-07-11 at 15:06, Roger wrote:
> > > Any ideas on what to try next?
> >
> > Not really.  Are you willing to send me a copy of your code and the full
> > traceback you're getting?  I think I need to actually see the code to
> > try to understand what's wrong.
> >
> > - Geoff
> 
> 
> 
> -------------------------------------------------------
> This sf.net email is sponsored by:ThinkGeek
> Welcome to geek heaven.
> http://thinkgeek.com/sf
> _______________________________________________
> Webware-discuss mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/webware-discuss




-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Webware-discuss mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/webware-discuss

Reply via email to