|
Alex Turner
aturner at neteconomist.com
Fri May 16 10:34:39 EST 2003
It's very unlikely to be a network problem because both the database and
the web server are running on the same host. The timings that I took were
done by placing a start=time.time() at the top of the code section that
executes
the file, and a print time.time()-start at the end, so I'm fairly
convinced that these are accurate. I then placed more time tests around
other parts of the mechanism which allowed me to gauge how long each
segment of the run takes. I have found a serious flaw in my database
class, having corrected that though, I found something interesting:
This is my init routine for by DBResult class:
def __init__(self,query):
start=time.time()
self.query=query
self.counter=0;
self.lresults_l=self.query.getresult()
self.dresults_l=self.query.dictresult()
self.fresults_l=[]
# Copy the indexed/dict values into fresults
for a in range(len(self.lresults_l)):
x=0
self.fresults_l.append({})
for b in self.lresults_l[a]:
self.fresults_l[a][x]=b
x=x+1
for b in self.dresults_l[a].keys():
self.fresults_l[a][b]=self.dresults_l[a][b]
print "Init time %f<br>\n" % (time.time()-start)
It's not pretty, but it does show something wierd:
inside apache this gives a time of: 0.178554 secs
outside apache this gives a time of: 0.093750 secs
almost twice as fast.
Maybe this is a pg module problem, I don't know, but it's certainly wierd!
Alex Turner
NetEconomist
On Tue, 13 May 2003, Jack Diederich wrote:
> >
> > I'm pretty sure this is not a DNS problem. I can break down each loop
> > that calls the database, and it shows 0.7 seconds per row returning
> > instead of like 0.03 seconds. The dns servers are all configured
> > correctly for both forward and reverse lookups, and I do not have the same
> > problems in PHP (other the fact that PHP is crap compared to python - but
> > it's not this slow).
>
> Are you doing anything wierd like running apache or progres
> through inetd (so it has to start a new process for every
> request)? Or are you doing a new database connection for
> each row?
>
> If the identical python program takes 1/10th the time running
> stand-alone I think the DNS was one the right track - it must
> be a network related problem.
>
> You might also want to print to the resulting page the time
> the process took from start to finish. If the page is very
> complicated it might look slower even if it isn't.
>
> You can also try commenting out all the database calls and
> timing the stand alone and mod_python versions. That will
> at least allow you to narrow down the problem. Also consider
> using 'strace' on the stand alone and the apache version.
> Compare the system calls between the two to see if something
> pathological is happening in the mod_python case.
>
> -jack
>
|