Saxonche: 12.4.2
Мой веб-сайт продолжает потреблять все больше и больше памяти, пока на сервере не закончится память и произойдет сбой. Я изолировал проблемный код в следующем скрипте:
import gc
from time import sleep
from saxonche import PySaxonProcessor
xml_str = """
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac auctor ex. Nunc in tincidunt urna. Sed tincidunt eros lacus, sed pulvinar sem venenatis et. Donec euismod orci quis pellentesque sagittis. Donec at tortor in dui mattis facilisis. Pellentesque vel varius lectus. Nunc sed gravida risus, ac finibus elit. Etiam sollicitudin nunc a velit efficitur molestie in ac lectus. Donec vulputate orci odio, sit amet hendrerit odio rhoncus commodo.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac auctor ex. Nunc in tincidunt urna. Sed tincidunt eros lacus, sed pulvinar sem venenatis et. Donec euismod orci quis pellentesque sagittis. Donec at tortor in dui mattis facilisis. Pellentesque vel varius lectus. Nunc sed gravida risus, ac finibus elit. Etiam sollicitudin nunc a velit efficitur molestie in ac lectus. Donec vulputate orci odio, sit amet hendrerit odio rhoncus commodo.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum ac auctor ex. Nunc in tincidunt urna. Sed tincidunt eros lacus, sed pulvinar sem venenatis et. Donec euismod orci quis pellentesque sagittis. Donec at tortor in dui mattis facilisis. Pellentesque vel varius lectus. Nunc sed gravida risus, ac finibus elit. Etiam sollicitudin nunc a velit efficitur molestie in ac lectus. Donec vulputate orci odio, sit amet hendrerit odio rhoncus commodo.
"""
while True:
print('Running once...')
with PySaxonProcessor(license=False) as proc:
proc.parse_xml(xml_text=xml_str)
gc.collect()
sleep(1)
Этот скрипт потребляет память со скоростью около 0,5 МБ в секунду. Использование памяти не стабилизируется через некоторое время. У меня есть журналы, показывающие, что использование памяти продолжает расти в течение нескольких часов, пока на сервере не закончится память и произойдет сбой.
Другие вещи, которые я пробовал, но не показаны выше:
- Использование PyDocumentBuilder для анализа XML вместо PySaxonProcessor. Похоже, ничего не изменилось.
- Удаление процессора Saxon и возвращаемого значения parse_xml() с использованием ключевого слова Python del. Без изменений.
Что такое Я делаю неправильно? Как мне проанализировать XML с помощью Saxon таким образом, чтобы не было утечки?
Некоторые люди предложили создать экземпляр PySaxonProcessor один раз, прежде чем цикл будет исправлен. утечка. Это не так. Это все еще протекает:
with PySaxonProcessor(license=False) as proc:
while True:
print('Running once...')
proc.parse_xml(xml_text=xml_str)
gc.collect()
sleep(1)
Подробнее здесь: https://stackoverflow.com/questions/783 ... -over-time