#python #selenium #memory-leaks #timeout #phantomjs
#python #selenium #утечки памяти #тайм-аут #phantomjs
Вопрос:
Когда мой запрос вызывает исключение тайм-аута, использование памяти процессом python в диспетчере задач / системном мониторе всегда увеличивается. Я не понял, если я проигнорирую исключение, потому что процесс будет остановлен системой. Но когда я пытаюсь получить какой-то новый URL-запрос после исключения тайм-аута, я понимаю, что использование памяти было увеличено. Если запрос выполнен успешно, он не оставляет никаких утечек памяти. В чем разница обработчика, когда он успешно загружает страницу и вызывает исключение тайм-аута? Почему исключение тайм-аута не удаляет предыдущую память? Есть ли какой-либо способ устранить утечки памяти?
def run():
try:
driver = webdriver.PhantomJS()
driver.set_page_load_timeout(20)
driver.get(url)
driver.quit()
del driver
run()
except KeyboardInterrupt:
raise
except:
print " ::: TIMEOUT "
driver.quit()
del driver
driver = None
gc.collect()
#here, python process (memory usage) in Task Manager / System Monitor always increase. if I call this function recursively, memory leak always increase when Timeout exception triggered.
====
Python 2.7
Selenium 2.42.1
PhantomJS 1.9.7
Ответ №1:
Я одна из жертв такого поведения. Я не пробовал PhantomJS, я использую Chromedriver.
в последнем блоке исключения, что вы можете сделать, вы можете использовать методы операционной системы для принудительного освобождения ресурсов.
в Windows вы можете сделать это следующим образом.
os.system("taskkill /im chromedriver.exe /f /t >nul 2>amp;1")
Это убивает все экземпляры chromedriver. или заменить chromedriver.exe любыми ресурсами, которые вы хотите.
обычно рекомендуется перехватывать исключение TimeoutException в одном блоке и сохранять в другом блоке except. будьте осторожны при использовании приведенного выше кода, это уничтожит все текущие chromedriver.exe программы, а также все запущенные им подпроцессы.
[редактировать] вы также можете использовать какой-либо другой метод для достижения этой цели