Как очистить все процессы Selenium Firefox - PullRequest
1 голос
/ 06 мая 2020

Я создал веб-парсер с python (3.6) и веб-драйвером selenium, firefox. Я настроил cronjob для запуска этого парсера каждые несколько минут, и, похоже, все работает, за исключением того, что со временем (например, через несколько дней) память на моем Ubuntu VPS (8 ГБ ОЗУ, Ubuntu 18.04.4) заполняется

Когда я проверяю HTOP, я вижу множество (например, сотни) процессов firefox, таких как «/ usr / lib / firefox -marionette» и «/ usr / lib / firefox -contentpro c ", каждый из которых занимает около 3 или 4 МБ памяти.

Я поместил

browser.stop_client() browser.close() browser.quit()

в каждом функция, которая использует веб-драйвер, но я подозреваю, что сценарий иногда оставляет веб-драйверы открытыми, когда он обнаруживает ошибку, и не закрывает их должным образом, и эти firefox процессы просто накапливаются, пока моя система не выйдет из строя.

I Я работаю над поиском root причины этого, но пока есть ли быстрый способ убить / очистить все эти процессы?

например, cronjob, который убивает все соответствующие процессы (старше 10 минут)?

Спасибо.

1 Ответ

0 голосов
/ 06 мая 2020

Я подозреваю, что скрипт иногда оставляет веб-драйверы открытыми, когда обнаруживает ошибку, и не закрывает их должным образом

Это, скорее всего, проблема. Мы исправляем эту проблему, используя try, за исключением, наконец, блоков.

browser = webdriver.Firefox()
try:
    # Your code
except Exception as e:
    # Log or print error
finally:
    browser.close()
    browser.quit()

И если вы все еще сталкиваетесь с той же проблемой, вы можете принудительно убить драйвер в соответствии с этим answer , или это ответ для Ubuntu.

import os
os.system("taskkill /im geckodriver.exe /f")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...