Я пишу паук в python и использую библиотеку lxml для разбора html и gevent-библиотеки для async. Я обнаружил, что после некоторого времени работы lxml parser начинает ест память до 8 ГБ (вся память сервера). Но у меня есть только 100 асинхронных потоков, каждый из которых анализирует документ max до 300 КБ.
i'v протестирован и эта проблема начинается с lxml.html.fromstring, но я не могу воспроизвести эту проблему.
Проблема в этой строке кода:
HTML = lxml.html.fromstring(htmltext)
Возможно, кто-то знает, что это может быть, или мотыги, чтобы исправить это?
Спасибо за помощь.
P.S.
Linux Debian-50-lenny-64-LAMP 2.6.26-2-amd64 #1 SMP Tue Jan 25 05:59:43 UTC 2011 x86_64 GNU/Linux
Python : (2, 6, 6, 'final', 0)
lxml.etree : (2, 3, 0, 0)
libxml used : (2, 7, 8)
libxml compiled : (2, 7, 8)
libxslt used : (1, 1, 26)
libxslt compiled : (1, 1, 26)
UP:
i установить ulimit -Sv 500000 и uliit -Sm 615000 для процессов, использующих парсер lxml.
И теперь через некоторое время они начинают записывать в журнал ошибок:
"Exception MemoryError: MemoryError() в 'lxml.etree._BaseErrorLog._receive" игнорируется ".
И я не могу поймать это исключение, поэтому он рекурсивно записывает в журнале это сообщение unile, на диске есть свободное место.
Как я могу поймать это исключение, чтобы убить процесс, чтобы демон мог создать новый?