From: Ian B. <ia...@co...> - 2003-10-06 08:38:38
|
On Sun, 2003-10-05 at 19:46, JZ wrote: > My testing code is > ============= > import os, time > url = [ > r'http://localhost/WK/test/test1/testpython.py', > r'http://localhost/WK/test/test1/testcheetah.tmpl', > r'http://localhost/WK/test/test1/testcheetah.py', > r'http://localhost/WK/test/test1/testpsp.psp', > r'http://localhost/testphp.php', > r'http://localhost/testspyce.spy', > ] > for u in url: > t1=time.time() > print '>>>%s' % u, > os.system('wget -m %s -o stress.log' % u) > t = time.time()-t1 > print ' => time: %f s' % t I don't think this testing code is reliable. When I use ab (ApacheBench, comes with the Apache distribution) I get something like 130 requests/sec for the Python servlet, and 250 requests/sec for the PHP script (though without MMCache). My system doesn't match yours -- I'm working off a slightly different version of Webware, on Linux instead of Windows, and maybe other differences as well. But it's pretty far off from your results. To do the tests I run "ab -n 1000 http://localhost/whatever" To test *Python's* speed vs. PHP, you'd have to use mod_python -- it's the only Python *environment* that is equivalent to PHP (well, PHP as CGI is like Python as CGI, but that's not a realistic test -- if you care about raw performance neither option is good). That's if you are wondering about the raw speed of the language. But I'm confident that Python would do quite well in that test for any non-trivial application. If you want to test the framework's speed, well, just be sure to use the right tools, and take results from trivial applications with some salt. Persistent Python applications can be optimized in a lot of ways -- many of those optimizations are language-neutral (caching database output, avoiding network connections, calculating dependencies, etc), but are easier to implement in Python than PHP. Ian |
From: <web...@ap...> - 2003-10-06 18:13:17
|
On Monady 2003-10-05 at 17:15:00 Ian Bicking <ia...@co...> wrote: >> if 0 < i < 100: ... > > This isn't proper Python, it's interpreted as (0 < i) < 100. No, you are wrong. It is interpreted as (0 < i ) and (i < 100) >>> i =-1 >>> if 0 < i < 10: ... print 'ok' ... else: ... print 'bad' ... bad >>> i = 12 >>> if 0 < i < 10: ... print 'ok' ... else: ... print 'bad' ... bad >>> i = 5 >>> if 0 < i < 10: ... print 'ok' ... else: ... print 'bad' ... ok > does it mirror 100 pages Yes. It does. >> Where can I find binary version? > It comes with Apache. Yes! I found it in bin directory. Thanx. It is much better tool than wget. >> > To test *Python's* speed vs. PHP, you'd have to use mod_python -- it's >> > the only Python *environment* that is equivalent to PHP (well, PHP as >> > CGI is like Python as CGI, but that's not a realistic test >> >> I am using mod_webkit.dll which is even faster than mod_python >> acordint to manual: >> http://webware.sourceforge.net/Webware-0.8.1/WebKit/Docs/InstallGuide.html#mod-python > That's in the context of Webware. Yes. I do not execute python scripts outside context of Webware (I even could not make mod_python to work with Python 2.3.2) > Webware's ModPythonAdapter doesn't actually run servlets in the > Apache process, it just uses a mod_python handler to connect to the > separate Webware process. mod_webkit does the same thing, only > written in C. Yes, and acording to webware manual mod_webkit works faster for Webware than mod_python. I found out, the real problem for my application is no pure performance of Python language. It really works quite fast, but... it oftem (for the same pages!) I have to wait even 10 or more seconds for refresh the page. I do not know, what is wrong. It appears from time to time. So I try to to solve this problem and I test different approach. -- JZ ICQ:6712522 |
From: Frank B. <fb...@fo...> - 2003-10-06 20:42:40
|
Hallo, Jaros?aw Zabie??o hat gesagt: // Jaros?aw Zabie??o wrote: > On Monady 2003-10-05 at 17:15:00 > Ian Bicking <ia...@co...> wrote: > > >> if 0 < i < 100: ... > > > > This isn't proper Python, it's interpreted as (0 < i) < 100. > > No, you are wrong. It is interpreted as (0 < i ) and (i < 100) > > >>> i =-1 > >>> if 0 < i < 10: > ... print 'ok' > ... else: > ... print 'bad' > ... Or (python 2.3): >>> 3 < 2 < 10 False >>> (3 < 2) < 10 True >>> 3 < (2 < 10) False I actually had this look up again, though. Too much C++ lately, but the docs say: Unlike C, all comparison operations in Python have the same priority, which is lower than that of any arithmetic, shifting or bitwise operation. Also unlike C, expressions like a < b < c have the interpretation that is conventional in mathematics: ... Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y and y <= z, except that y is evaluated only once (but in both cases z is not evaluated at all when x < y is found to be false). ciao -- Frank Barknecht _ ______footils.org__ |
From: <web...@ka...> - 2003-10-06 22:25:20
|
--> Monday, October 6, 2003, 1:15:00 PM, web...@ap... wrote: > [snippity-doo-dah] > oftem (for the same pages!) I have to wait even 10 or more seconds for > refresh the page. I do not know, what is wrong. It appears from time > to time. So I try to to solve this problem and I test different > approach. Yes, ApacheBench will show you problems like this quit easily. Are you using one thread? two threads? Testing for a difference in the two could be telling. Are you using the auto-restart capabilities of WebWare? Try commenting out all your Apache performance directives... MaxKeepAliveRequests, KeepAliveTimeout, ThreadsPerChild, MaxRequestsPerChild, etc. -Kai |
From: <web...@ap...> - 2003-10-07 20:15:22
|
Almost all of my problems GONE! Inspired by Mike Orr and his example of cache mechanism, I created independent module with all Cheetah definition (and all sql queries, which are not dependent on different parameters). This module is compiled only once and is imported by all my servlets. My application started to work very fast and stable. It works *much faster* than every our PHP applications. I am under impression. Thanx to all for suggestions. I had poor experience with preparing efficient code for servlets before. -- Jarek |
From: JZ <pro...@mu...> - 2003-10-06 10:55:34
|
Hello Ian, Monday, October 6, 2003, 10:39:19 AM, you wrote: > I don't think this testing code is reliable. When I use ab > (ApacheBench, comes with the Apache distribution) Hmm, I am trying to solve problem with my Webware application. It's behavior is strange. It works quite good.... but sometime it hangs for several seconds and I do not why. I changed max. nr of concurent servlets from 20 to 100 but it did not helped? :( I am finding solution so I check the problem from different points of view. > I get something like 130 requests/sec for the Python servlet, and > 250 requests/sec for the PHP script (though without MMCache). But PHP is still faster, isn't it? MMCache can speed up PHP to 10x. But the real problem is as I wrote abowe. My Webware&Cheetah application hangs for several seconds. It appears from time to time. It is confusing. > To do the tests I run "ab -n 1000 http://localhost/whatever" Where can I find binary version? > To test *Python's* speed vs. PHP, you'd have to use mod_python -- it's > the only Python *environment* that is equivalent to PHP (well, PHP as > CGI is like Python as CGI, but that's not a realistic test I am using mod_webkit.dll which is even faster than mod_python acordint to manual: http://webware.sourceforge.net/Webware-0.8.1/WebKit/Docs/InstallGuide.html#mod-python > But I'm confident that Python would do quite well in that test for > any non-trivial application. I wish to say it. -- JZ ICQ:6712522 |
From: Ian B. <ia...@co...> - 2003-10-06 15:14:12
|
On Mon, 2003-10-06 at 05:55, JZ wrote: > Hello Ian, > > Monday, October 6, 2003, 10:39:19 AM, you wrote: > > > I don't think this testing code is reliable. When I use ab > > (ApacheBench, comes with the Apache distribution) > > Hmm, I am trying to solve problem with my Webware application. It's > behavior is strange. It works quite good.... but sometime it hangs for > several seconds and I do not why. I changed max. nr of concurent > servlets from 20 to 100 but it did not helped? :( I am finding > solution so I check the problem from different points of view. There was also a problem in your code, if 0 < i < 100: ... This isn't proper Python, it's interpreted as (0 < i) < 100. Since you are using wget with the mirror option, the stalling is probably in how wget interprets the pages -- does it mirror 100 pages (the loop size in PHP), or does it mirror until it decides there's an infinite depth of pages? > > I get something like 130 requests/sec for the Python servlet, and > > 250 requests/sec for the PHP script (though without MMCache). > > But PHP is still faster, isn't it? MMCache can speed up PHP to 10x. Yes, PHP is faster in this instance. As some other people have noted, Webware has more intermediary steps for each request. I don't know much about MMCache, but I doubt it can do anything close to 10x when presented with a trivial script, and I expect the benchmarking of significant applications give much different results than this benchmarking of a trivial application. A trivial application only measures the basic connection overhead. > But the real problem is as I wrote abowe. My Webware&Cheetah > application hangs for several seconds. It appears from time to time. > It is confusing. > > > To do the tests I run "ab -n 1000 http://localhost/whatever" > > Where can I find binary version? It comes with Apache. Since you are on Windows, I don't know where in the Apache distribution it would be. Debian puts it in /usr/sbin/ab > > To test *Python's* speed vs. PHP, you'd have to use mod_python -- it's > > the only Python *environment* that is equivalent to PHP (well, PHP as > > CGI is like Python as CGI, but that's not a realistic test > > I am using mod_webkit.dll which is even faster than mod_python > acordint to manual: > http://webware.sourceforge.net/Webware-0.8.1/WebKit/Docs/InstallGuide.html#mod-python That's in the context of Webware. Webware's ModPythonAdapter doesn't actually run servlets in the Apache process, it just uses a mod_python handler to connect to the separate Webware process. mod_webkit does the same thing, only written in C. Ian |