On 9/19/05, Gregor Horvath <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I am evaluationg using Webware instead of plain python CGI.
> I therefore run some benchmark tests, and discovered that there is no
> difference in time needed between the webware and the cgi script.
> I am a little bit surprised, because I thought webware must be
> theoretically faster, because of the cached database connection and the
> interpreter startup overhead with cgi.
> Do you have a explanantion for that? Are my benchmarks wrong, or is it
> just the thruth that under this circumstances cgi is as fast as webware.
>
> Python 2.2, Apache, Linux Redhat 9 (2.4.20), WebWare 0.81, Single
> Processor P4, 500 MB RAM
>
> Running the benchmak script, profile says for testwebware:
>
> 55254 function calls (55219 primitive calls) in 0.760 CPU seconds
>
> and testcgi:
>
> 54505 function calls in 0.800 CPU seconds
>
> Running testpsycopg says:
>
> 5356 function calls in 0.380 CPU seconds
I tested WebKit vs. CGI a long time ago and got a *huge* speed up due
to CGI's overhead such as:
- launching the Python interpreter as a new process
- importing various modules (sys, time, os, cgi, etc.)
I didn't measure in CPU seconds for function calls. I measured in
requests per seconds.
I got an even bigger speed boost when there was any configurations,
database records or computed values that I could cache (and there
often are).
Some thoughts on your speed test:
- There is very little Python code in the CGI script or servlet. My
own web apps have plenty of Python code to put the page together, so
if I was testing I would try something that looks more typical.
- I trust the profile module to help me locate bottlenecks in my
Python code, but for speed tests like this I prefer wall time:
(untested)
import time
def durationOf(run, iterations=1000): # notice bigger range
r = range(iterations)
start = time.time()
for i in r:
# multiple calls to reduce overhead from "for"
run()
run()
run()
run()
run()
run()
run()
run()
run()
run()
duration = time.time() - start
print 'duration of %s is %s' % (run, duration)
return duration
def this():
...
def that():
...
durationOf(this)
durationOf(that)
Also, exit email, exit all web browsers and shut down as many other
programs as possible before running.
What kind of results do you get then?
-Chuck
-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
Webware-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/webware-discuss