Я пишу несколько пауков в python и использую библиотеку lxml для анализа html и библиотеку gevent для асинхронного.Я обнаружил, что после некоторого времени работы lxml parser начинает кушать память до 8 Гб (вся память сервера).Но у меня есть только 100 асинхронных потоков, каждый из которых анализирует документ максимум до 300 КБ.
Я протестировал, и эта проблема начинается в lxml.html.fromstring, но я не могу воспроизвести эту проблему.
Проблема в этой строке кода:
HTML = lxml.html.fromstring(htmltext)
Может быть, кто-то знает, что это может быть, или как это исправить?
Спасибо за помощь.
PS
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:
я установил ulimit -Sv 500000 и uliit -Sm 615000 для процессов, использующих анализатор lxml.
А теперьчерез некоторое время они начинают записывать в журнал ошибок:
«Исключение MemoryError: MemoryError () в lxml.etree._BaseErrorLog._receive« ignored ».
И я не могу поймать это исключение, поэтому оно рекурсивно записывает в журнал это сообщение, пока на диске нет свободного места.
Как мне перехватить это исключение, чтобы уничтожить процесс, чтобы демон мог создать новоеодин ??