apparently, the render method use string concat often cause the problem, it
should have other method to process
string concat method you can try simulate other languages StringBuilder, use
a list append your string,
and then use a join method get the string to output

On Fri, Jan 2, 2009 at 12:52 PM, mb <[email protected]> wrote:

>
> It looks like iterating over the db result object is what's causing
> the slowdown.
>
> With a small result set (20 records), here are the times in 0.31 to do
> the db query and to render xml by iterating over the result object:
>    db: 0.01993 second
>    render: 0.00087 second
>    total: 0.02671 second
>
> Then with a large result set (17,142 records):
>    db: 0.09306 second
>    render: 67.98967 seconds
>    total: 68.08277
>
> On version 0.23 and the large result set (17,142 records):
>    db: 0.06552
>    render: 0.16659
>    total: 0.23248
>
> Clearly the render function is the problem.  This function takes the
> db result object as a parameter, and iterates over it to create the
> xml:
>
>    def render_xml(items):
>        xml = '<?xml version=\"1.0\"?>\n'
>        xml += '<rootnode>\n'
>        for item in items:
>            xml += '<itemnumber>%s</itemnumber>\n' % item.id
>            xml += '<description>%s</description>\n' % item.descr
>            xml += '<quantity>%s</quantity>\n' % item.qty
>            ...
>        return xml
>
>    dbresult = db.query(querystring)
>    return render_xml(dbresult)
>
> On Jan 1, 8:04 pm, "Aaron Swartz" <[email protected]> wrote:
> > Can you share more details? Code? Profiler output?
> >
> > On Jan 1, 2009 10:55 PM, "mb" <[email protected]> wrote:
> >
> > I have a web service that queries a database and returns a fairly
> > large xml document based on parameters in the URL.
> >
> > This morning, with web.py 0.23, it would return a 17,142 line response
> > (491k) in 200 ms.
> >
> > This afternoon I upgraded to 0.31, and it now takes 56 seconds for the
> > same action.
> >
> > For the entire 56 seconds, the cpu is pegged at 100% on the python
> > process with just one request, where on 0.23 I could run many
> > simultaneous requests and the cpu was rarely over 40%.
> >
> > Any ideas why my performance has dropped by a factor of 300?
> >
>


-- 
Su zhaohui   苏召辉

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web.py" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [email protected]
For more options, visit this group at http://groups.google.com/group/webpy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to