I don't think it's a leak because the consumed memory is constant, ie.
the max requested at certain point in the life of the process, and it
stays there for same data set regardless of how often it is requested.
I'm not constructing the XML with strings directly but using lxml (and
not xml.etree builtin because I use much faster lxml with C extensions
for parsing and xsd validation as well), which is perhaps overkill and
yeah, I can see several ways to chop that up into smaller pieces and
append stuff to a temp file on disc and then return that with a
generator or even x-sendfile, but I was hoping for a more
"straightforward" solution not requiring rewrite.
I've got about 20 XML file formats to construct, each produced by its
own (pluggable) module because each defines its own format etc...
Switching to a file-based partial generation would mean a massive
rewrite. I guess this is one of the situations where "preemptive
optimization is evil" bit me because I _was_ concerned with performance
when I started building the system. Admittedly at that point I wasn't
aware of the Pythons memory retention "policy".
I was hoping there's a way to safely kill a wsgi process from within it,
I could do that only when such largish XML files are requested, or
something else not obvious to me. Doesn't have to be uwsgi, though.
Another way would be to remove XML generation from the wsgi application
altogether into a separate callable and do some subprocess.Popen magick
with minimum rewrite required. Is that even wise/advisable under
(u)wsgi? Spawning external processes?
Thanks,
.oO V Oo.