Я использую dryscrape/webkit_server для очистки веб-сайтов с поддержкой javascript.Утечка памяти Dryscrape/webkit_server
Использование памяти процесса webkit_server увеличивается с каждым вызовом session.visit(). Это происходит со мной, используя следующий сценарий:
import dryscrape
for url in urls:
session = dryscrape.Session()
session.set_timeout(10)
session.set_attribute('auto_load_images', False)
session.visit(url)
response = session.body()
Я повторяю прибл. 300 URL-адресов и после 70-80 URL-адресов webkit_server занимает около 3 ГБ памяти. Однако на самом деле это не проблема для меня, но кажется, что dryscrape/webkit_server становится все медленнее с каждой итерацией. После упомянутых 70-80 итераций dryscrape так медленно, что он вызывает ошибку таймаута (установить тайм-аут = 10 секунд), и мне нужно прервать скрипт python. Перезапуск webkit_server (например, после каждых 30 итераций) может помочь и освободит память, однако я не уверен, что «утечка памяти» действительно ответственна за сухую царапину, которая замедляется и замедляется.
Кто-нибудь знает, как перезапустить webkit_server, чтобы я мог проверить это?
Я не нашел приемлемого обходного пути для этой проблемы, однако я также не хочу переключаться на другое решение (selenium/phantomjs, ghost.py), поскольку я просто люблю dryscrape для его простоты. Dryscrape работает отлично. если вы не повторяете слишком много URL-адресов за один сеанс.
Этот вопрос также обсуждается здесь
https://github.com/niklasb/dryscrape/issues/41
и здесь
до тех пор, пока у dryscrape есть код python, вы можете бросить декораторы '@ profile' и запустить [mprof] (https://pypi.python.org/pypi/memory_profiler/0.33) или [kernprof] (https://github.com/rkern/line_profiler). Вы можете запустить его по своему собственному коду, но, вероятно, это будет не так полезно. –
Спасибо, Уэйн! – Baili