Python Saxon not releasing memory
I've recently built an AWS Lambda running Python 3.10 that takes a request, transforms it and returns the result.
This all seems fine and works quite well.
The issue is with each invocation the memory usage and runtime grows until it hits the limit and the lambda instance is killed off.
I've knocked up a very simple program that I can run locally which demonstrates this behaviour.
import psutil from saxoncpe import * process = psutil.Process() start_memory = process.memory_info().rss with PySaxonProcessor(license=True) as saxon_processor: xslt_proc = saxon_processor.new_xslt30_processor() document = saxon_processor.parse_xml(xml_text="<request></request>") executable = xslt_proc.compile_stylesheet(stylesheet_file="transforms/QuoteRequest-sample.xslt") values = range(1000) for i in values: executable.transform_to_string(xdm_node=document) print(process.memory_info().rss) end_process = psutil.Process() print("Start memory:") print(start_memory) print("End memory:") print(process.memory_info().rss)
If you comment out all of the Saxon code then you will see the memory does not increase. If you move most of it out of the for loop, so it's only called once, and only have the
transform_to_string function in the loop then the memory still increases.
What is cause the memory to be locked? How can I release it so it can be used in an AWS lambda with 100s and 1000s of requests?
Please register to edit this issue