python - 如何清理所有 Selenium Firefox 进程
问题描述
我用 python (3.6) 和一个 selenium、firefox 网络驱动程序创建了一个网络爬虫。我已经设置了一个 cronjob 来每隔几分钟运行一次这个爬虫,它似乎都在工作,除了随着时间的推移(比如几天),我的 Ubuntu VPS(8GB RAM,Ubuntu 18.04.4)上的内存会填满起来,它崩溃了。
当我检查 HTOP 时,我可以看到很多(如数百个)firefox 进程,如“/usr/lib/firefox -marionette”和“/usr/lib/firefox -contentproc”,它们都占用了大约 3 或 4mb 的内存每个。
我放了一个
browser.stop_client()
browser.close()
browser.quit()
在使用 Web 驱动程序的每个函数中,但我怀疑脚本有时会在遇到错误时打开 Web 驱动程序,并且没有正确关闭它们,并且这些 firefox 进程只会累积直到我的系统崩溃。
我正在努力寻找造成这种情况的根本原因,但与此同时,有没有一种快速的方法可以杀死/清理所有这些进程?
例如,杀死所有匹配进程(超过 10 分钟)的 cronjob?
谢谢。
解决方案
我怀疑脚本有时会在遇到错误时打开网络驱动程序,并且没有正确关闭它们
这很可能是问题所在。我们通过使用try except finally块来解决此问题。
browser = webdriver.Firefox()
try:
# Your code
except Exception as e:
# Log or print error
finally:
browser.close()
browser.quit()
如果你仍然面临同样的问题,你可以按照这个答案强制杀死驱动程序,或者这个Ubuntu 的答案。
import os
os.system("taskkill /im geckodriver.exe /f")
推荐阅读
- java - 端点不可访问时的 Kubernetes 启动探测
- python - 我如何用python删除json的特定元素
- c++ - 将控制台应用打包到 MSIX 包中时出现错误 0x800B0100
- javascript - !kick 命令代码的一些问题
- scala - 如何将 spark scala 数据框列转换为日期时间?
- haskell - 如何对非单子使用`bound`?
- r - CRAN 拒绝不在主流存储库中的 tidyverse 依赖项
- python - Windows 10 错误:FileNotFoundError:系统在执行 .exe 时找不到指定子进程的文件
- c++ - std::mt19937 为相同的第一个浮点数 ex(1.2, 1.5) 给出相同的随机浮点数
- flutter - 我想创建一个密钥库来签署应用程序,但每次我收到这个错误时说什么?